package com.gh.common.util; import android.app.Activity; import android.app.Application; import android.content.Context; import android.os.Build; import android.preference.PreferenceManager; import android.text.TextUtils; import com.gh.common.constant.Constants; import com.gh.common.exposure.meta.MetaUtil; import com.gh.gamecenter.BuildConfig; import com.gh.gid.GidCallback; import com.gh.gid.GidHelper; import com.halo.assistant.HaloApp; import com.lightgame.config.CommonDebug; import com.lightgame.utils.Utils; import java.util.HashMap; import java.util.Map; import io.sentry.android.core.SentryAndroid; import io.sentry.core.Sentry; import io.sentry.core.protocol.User; /** * Created by LGT on 2016/6/15. * 数据收集 工具类 (TalkingData、MTA) */ public class DataUtils { /** * 初始化各种统计工具,仅在release build(非debug)模式启用统计 * * @param context * @param channel */ public static void init(final Application context, String channel) { if (CommonDebug.IS_DEBUG) { return; } SentryAndroid.init(context, options -> { // Sentry 疯狂报 ANR (很大一部分还是莫名奇妙的 ANR)严重影响到其它闪退日志的收集 // 这里将它局限到只有官网渠道的包才统计 ANR if ("GH_206".equals(channel)) { options.setAnrEnabled(true); options.setAnrTimeoutIntervalMillis(6000); } else { options.setAnrEnabled(false); } options.setDebug(BuildConfig.DEBUG); options.setEnableSessionTracking(true); options.setEnvironment(BuildConfig.FLAVOR); options.setDsn("https://6b1caf0d17c1408e8680f3f73ff80bd0@sentry.ghzs.com/22"); options.setBeforeSend((event, hint) -> { if (BuildConfig.DEBUG) { return null; } else { return event; } }); }); Sentry.configureScope(scope -> { User user = new User(); user.setId(HaloApp.getInstance().getGid()); scope.setUser(user); if (BuildConfig.BUILD_TIME != 0L) { scope.setTag("alias", "内测版" + BuildConfig.VERSION_NAME + "_" + BuildConfig.BUILD_TIME); } else { scope.setTag("alias", "正式版" + BuildConfig.VERSION_NAME); scope.setTag("channel", channel); } }); //TalkingData // try { // TCAgent.LOG_ON = false; // TCAgent.init(context, Config.TALKINGDATA_APPID, channel); // /** // * // * 不要启用!!!!不要启用,全部由{@link com.gh.base.AppUncaughtHandler}处理 // */ // TCAgent.setReportUncaughtExceptions(false); // } catch (Exception e) { // e.printStackTrace(); // } //MTA // try { // /** // * // * 不要启用!!!!全部由{@link com.gh.base.AppUncaughtHandler}处理 // */ // StatConfig.setAutoExceptionCaught(false); // // StatCrashReporter crashReporter = StatCrashReporter.getStatCrashReporter(context); // crashReporter.setJavaCrashHandlerStatus(false); //// crashReporter.setEnableInstantReporting(true); // // StatConfig.setDebugEnable(false); // // // 设置数据上报策略 // // 测试渠道的时候即时上传,方便查看日志 // if (Config.DEFAULT_CHANNEL.equals(HaloApp.getInstance().getChannel())) { // StatConfig.setStatSendStrategy(StatReportStrategy.INSTANT); // } else { // StatConfig.setStatSendStrategy(StatReportStrategy.PERIOD); // StatConfig.setSendPeriodMinutes(5); // } // // // 设置启用Tlink // StatConfig.setTLinkStatus(true); // // StatConfig.init(context); // StatConfig.setInstallChannel(channel); // StatConfig.setAntoActivityLifecycleStat(true); // StatConfig.setAppVersion(PackageUtils.getVersionName()); // // // 开启收集服务 // StatService.startStatService(context, Config.MTA_APPKEY, com.tencent.stat.common.StatConstants.VERSION); // StatService.registerActivityLifecycleCallbacks(context); // } catch (MtaSDkException e) { // e.printStackTrace(); // } // init bugly // try { // CrashReport.setIsDevelopmentDevice(context, Config.DEFAULT_CHANNEL.equals(channel)); // // CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(context); // strategy.setEnableANRCrashMonitor(false); // strategy.setEnableNativeCrashMonitor(false); // strategy.setAppChannel(channel); // strategy.setAppVersion(PackageUtils.getVersionName()); // // CrashReport.initCrashReport(context, Config.BUGLY_APPID, false, strategy); // // } catch (Exception e) { // e.printStackTrace(); // } } // MTA ->【次数统计】Key-Value参数的事件 public static void onMtaEvent(Context context, String eventId, String... kv) { // if (CommonDebug.IS_DEBUG && (kv == null || kv.length % 2 != 0)) { // throw new IllegalStateException("onEvent kv 必须不为空且数量为偶数"); // } MtaHelper.onEvent(eventId, kv); } public static void getGid() { GidHelper.getInstance().registerDevice(HaloApp.getInstance().getApplication(), new GidCallback() { @Override public void onSuccess(String gid) { Utils.log("Gid", gid); PreferenceManager.getDefaultSharedPreferences(HaloApp.getInstance().getApplication()).edit().putString(Constants.DEVICE_KEY, gid).apply(); String originalGid = HaloApp.getInstance().getGid(); HaloApp.getInstance().setGid(gid); // 避免重复调用 if (!TextUtils.isEmpty(gid) && !gid.equals(originalGid)) { GameSubstituteRepositoryHelper.updateSubstitutableGames(); } // 避免初始化顺序问题导致 MetaUtil 一直持有空的 gid MetaUtil.INSTANCE.refreshMeta(); } @Override public void onFailure(String s) { MtaHelper.onEventWithBasicDeviceInfo("开发辅助", "GID 获取异常", s); } }); } public static void onEvent(Context var0, String var1, String var2) { // Properties prop = new Properties(); // prop.setProperty(var1, var2); // StatService.trackCustomKVEvent(var0, var1, prop); } public static void onPause(Activity var0) { // StatService.onPause(var0); } public static void onResume(Activity var0) { // StatService.onResume(var0); } // 游戏启动 public static void onGameLaunchEvent(Context context, String gameName, String platform, String page) { Map kv = new HashMap<>(); kv.put("版本", platform); kv.put("页面", page); onEvent(context, "游戏启动", gameName, kv); } public static void onEvent(Context var0, String var1, String var2, Map var3) { // Properties prop = new Properties(); // prop.setProperty("label", var2); // for (String key : var3.keySet()) { // prop.setProperty(key, var3.get(key) + ""); // } // StatService.trackCustomKVEvent(var0, var1, prop); } public static void trackTimeEvent(Context context, String eventId, int costTime, String... kv) { // // Properties prop = new Properties(); // for (int i = 0; i < kv.length; i++) { // if (i % 2 != 0 || i != 0) { // String key = kv[i - 1]; // String value = kv[i]; // if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(value)) { // prop.setProperty(key, value); // } // } // } // // if (prop.size() == 0) return; // // StatService.trackCustomKVTimeIntervalEvent(context, costTime, eventId, prop); } // 游戏下载 public static void onGameDownloadEvent(Context context, String gameName, String platform, String entrance, String status, String method) { Map kv = new HashMap<>(); platform = PlatformUtils.getInstance(HaloApp.getInstance().getApplication()).getPlatformName(platform); kv.put("版本", platform); kv.put("用户机型", Build.MODEL); kv.put("设备IMEI", MetaUtil.getIMEI()); kv.put("网络状态", DeviceUtils.getNetwork(HaloApp.getInstance().getApplication())); kv.put("光环助手版本", BuildConfig.VERSION_NAME); kv.put("位置", entrance); kv.put("类型", method); kv.put("厂商", Build.MANUFACTURER); kv.put("Android版本", Build.VERSION.RELEASE); onEvent(context, "游戏下载", gameName, kv); Map kv2 = new HashMap<>(); kv2.put("状态", status); kv2.put("位置", entrance); if (status.equals("开始")) { kv2.put("版本", entrance + "-开始"); kv2.put("游戏分平台", gameName + "-" + platform + "-开始"); kv2.put("光环助手版本", BuildConfig.VERSION_NAME + "-开始"); } else { kv2.put("版本", platform); kv2.put("游戏分平台", gameName + "-" + platform); kv2.put("光环助手版本", BuildConfig.VERSION_NAME); } onEvent(context, "游戏下载位置", gameName, kv2); } // 游戏更新 public static void onGameUpdateEvent(Context context, String gameName, String paltform, String status) { Map kv = new HashMap<>(); kv.put("版本", paltform); kv.put("状态", status); onEvent(context, "游戏更新", gameName, kv); } public static void onError(Context context, Throwable throwable) { //bugly 作为默认处理异常的类库,已经上报了,此处不重复上报 try { // CrashReport.postCatchedException(throwable); } catch (Exception e) { } //talkingdata try { // TCAgent.onError(context, throwable); } catch (Exception e) { } } }