Merge pull request #1 from lex111/android-support
Add support for Android
This commit is contained in:
commit
1cef1b5c7b
22
android/build.gradle
Normal file
22
android/build.gradle
Normal file
@ -0,0 +1,22 @@
|
||||
apply plugin: 'com.android.library'
|
||||
|
||||
android {
|
||||
compileSdkVersion 23
|
||||
buildToolsVersion "23.0.1"
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 16
|
||||
targetSdkVersion 22
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
warning 'InvalidPackage'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile 'com.facebook.react:react-native:+'
|
||||
compile 'com.yandex.android:mobmetricalib:2.76'
|
||||
}
|
3
android/src/main/AndroidManifest.xml
Normal file
3
android/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,3 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.aandrosov.AppMetrica">
|
||||
|
||||
</manifest>
|
@ -0,0 +1,92 @@
|
||||
package com.aandrosov.AppMetrica;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.Log;
|
||||
|
||||
import com.facebook.react.ReactApplication;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
||||
import com.facebook.react.bridge.ReactMethod;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.bridge.ReadableMapKeySetIterator;
|
||||
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.lang.Exception;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import com.yandex.metrica.YandexMetrica;
|
||||
|
||||
public class AppMetricaModule extends ReactContextBaseJavaModule {
|
||||
final static String ModuleName = "AppMetrica";
|
||||
|
||||
public AppMetricaModule(ReactApplicationContext reactContext) {
|
||||
super(reactContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return ModuleName;
|
||||
}
|
||||
|
||||
|
||||
@ReactMethod
|
||||
public void activateWithApiKey(String key) {
|
||||
YandexMetrica.activate(getReactApplicationContext().getApplicationContext(), key);
|
||||
|
||||
Activity activity = getCurrentActivity();
|
||||
Application application = activity.getApplication();
|
||||
YandexMetrica.enableActivityAutoTracking(application);
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void reportEvent(String message, @Nullable ReadableMap params) {
|
||||
if (params != null) {
|
||||
YandexMetrica.reportEvent(message, convertReadableMapToJson(params));
|
||||
} else {
|
||||
YandexMetrica.reportEvent(message);
|
||||
}
|
||||
}
|
||||
|
||||
private String convertReadableMapToJson(final ReadableMap readableMap) {
|
||||
ReadableMapKeySetIterator iterator = readableMap.keySetIterator();
|
||||
JSONObject json = new JSONObject();
|
||||
|
||||
try {
|
||||
while (iterator.hasNextKey()) {
|
||||
String key = iterator.nextKey();
|
||||
|
||||
switch (readableMap.getType(key)) {
|
||||
case Null:
|
||||
json.put(key, null);
|
||||
break;
|
||||
case Boolean:
|
||||
json.put(key, readableMap.getBoolean(key));
|
||||
break;
|
||||
case Number:
|
||||
json.put(key, readableMap.getDouble(key));
|
||||
break;
|
||||
case String:
|
||||
json.put(key, readableMap.getString(key));
|
||||
break;
|
||||
case Array:
|
||||
json.put(key, readableMap.getArray(key));
|
||||
break;
|
||||
case Map:
|
||||
json.put(key, convertReadableMapToJson(readableMap.getMap(key)));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Log.d(ModuleName, "convertReadableMapToJson fail: " + ex);
|
||||
}
|
||||
|
||||
return json.toString();
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.aandrosov.AppMetrica;
|
||||
|
||||
import com.facebook.react.ReactPackage;
|
||||
import com.facebook.react.bridge.JavaScriptModule;
|
||||
import com.facebook.react.bridge.NativeModule;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.uimanager.ViewManager;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class AppMetricaPackage implements ReactPackage {
|
||||
@Override
|
||||
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
|
||||
return Arrays.<NativeModule>asList(
|
||||
new AppMetricaModule(reactContext)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user