2018-08-30 11:13:18 +02:00

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();
}
}