123 lines
4.1 KiB
Java
123 lines
4.1 KiB
Java
package com.doochik.RNAppMetrica;
|
|
|
|
import android.app.Activity;
|
|
import android.app.Application;
|
|
import android.support.annotation.Nullable;
|
|
import android.util.Log;
|
|
|
|
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 java.lang.Exception;
|
|
|
|
import org.json.JSONObject;
|
|
|
|
import com.yandex.metrica.YandexMetrica;
|
|
import com.yandex.metrica.YandexMetricaConfig;
|
|
|
|
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) {
|
|
YandexMetricaConfig.Builder configBuilder = YandexMetricaConfig.newConfigBuilder(key);
|
|
YandexMetrica.activate(getReactApplicationContext().getApplicationContext(), configBuilder.build());
|
|
Activity activity = getCurrentActivity();
|
|
if (activity != null) {
|
|
Application application = activity.getApplication();
|
|
YandexMetrica.enableActivityAutoTracking(application);
|
|
}
|
|
}
|
|
|
|
@ReactMethod
|
|
public void activateWithConfig(ReadableMap params) {
|
|
YandexMetricaConfig.Builder configBuilder = YandexMetricaConfig.newConfigBuilder(params.getString("apiKey"));
|
|
if (params.hasKey("sessionTimeout")) {
|
|
configBuilder.withSessionTimeout(params.getInt("sessionTimeout"));
|
|
}
|
|
if (params.hasKey("firstActivationAsUpdate")) {
|
|
configBuilder.handleFirstActivationAsUpdate(params.getBoolean("firstActivationAsUpdate"));
|
|
}
|
|
YandexMetrica.activate(getReactApplicationContext().getApplicationContext(), configBuilder.build());
|
|
Activity activity = getCurrentActivity();
|
|
if (activity != null) {
|
|
Application application = activity.getApplication();
|
|
YandexMetrica.enableActivityAutoTracking(application);
|
|
}
|
|
}
|
|
|
|
@ReactMethod
|
|
public void reportError(String message) {
|
|
try {
|
|
Integer.valueOf("00xffWr0ng");
|
|
} catch (Throwable error) {
|
|
YandexMetrica.reportError(message, error);
|
|
}
|
|
}
|
|
|
|
@ReactMethod
|
|
public void reportEvent(String message, @Nullable ReadableMap params) {
|
|
if (params != null) {
|
|
YandexMetrica.reportEvent(message, convertReadableMapToJson(params));
|
|
} else {
|
|
YandexMetrica.reportEvent(message);
|
|
}
|
|
}
|
|
|
|
@ReactMethod
|
|
public void setUserProfileID(String profileID) {
|
|
YandexMetrica.setUserProfileID(profileID);
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|