190 lines
7.5 KiB
Java
190 lines
7.5 KiB
Java
package com.gh.common.util;
|
||
|
||
import android.annotation.SuppressLint;
|
||
import android.app.Application;
|
||
import android.content.ContentValues;
|
||
import android.content.Context;
|
||
import android.net.Uri;
|
||
import android.preference.PreferenceManager;
|
||
import android.text.TextUtils;
|
||
import android.util.Log;
|
||
|
||
import com.alibaba.android.arouter.launcher.ARouter;
|
||
import com.gh.ad.AdDelegateHelper;
|
||
import com.gh.gamecenter.BuildConfig;
|
||
import com.gh.gamecenter.common.constant.Constants;
|
||
import com.gh.gamecenter.common.constant.RouteConsts;
|
||
import com.gh.gamecenter.common.exposure.meta.MetaUtil;
|
||
import com.gh.gamecenter.common.retrofit.BiResponse;
|
||
import com.gh.gamecenter.core.AppExecutor;
|
||
import com.gh.gamecenter.core.provider.ISentryProvider;
|
||
import com.gh.gamecenter.core.utils.GsonUtils;
|
||
import com.gh.gamecenter.core.utils.SPUtils;
|
||
import com.gh.gamecenter.feature.utils.SentryHelper;
|
||
import com.gh.gamecenter.login.entity.IdCardEntity;
|
||
import com.gh.gamecenter.login.entity.UserInfoEntity;
|
||
import com.gh.gamecenter.provider.GhContentProvider;
|
||
import com.gh.gamecenter.retrofit.RetrofitManager;
|
||
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 io.reactivex.schedulers.Schedulers;
|
||
|
||
/**
|
||
* Created by LGT on 2016/6/15.
|
||
* 数据收集工具类
|
||
*/
|
||
public class DataUtils {
|
||
|
||
private DataUtils() {
|
||
throw new IllegalStateException("Utility class");
|
||
}
|
||
|
||
/**
|
||
* 初始化各种统计工具,仅在release build(非debug)模式启用统计
|
||
*/
|
||
public static void init(final Application context, String channel) {
|
||
if (CommonDebug.IS_DEBUG) {
|
||
return;
|
||
}
|
||
|
||
initSentry(context, channel);
|
||
}
|
||
|
||
private static void initSentry(Context context, String channel) {
|
||
ISentryProvider sentryProvider = (ISentryProvider) ARouter.getInstance().build(RouteConsts.provider.sentry).navigation();
|
||
if (sentryProvider != null) {
|
||
sentryProvider.init(context, channel, BuildConfig.FLAVOR, BuildConfig.VERSION_NAME);
|
||
}
|
||
}
|
||
|
||
public static void getGid() {
|
||
// 默认用 APP 级已存储的 GID 来使用,不使用外部 GID
|
||
String savedGid = SPUtils.getString(Constants.GID);
|
||
if (!TextUtils.isEmpty(savedGid)) {
|
||
HaloApp.getInstance().setGid(savedGid);
|
||
onGidReceived(savedGid);
|
||
} else {
|
||
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();
|
||
|
||
SPUtils.setString(Constants.GID, gid);
|
||
|
||
onGidReceived(gid);
|
||
}
|
||
|
||
@Override
|
||
public void onFailure(String s) {
|
||
// 更新广告配置
|
||
AdDelegateHelper.INSTANCE.requestAdConfig(false, "", null);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
|
||
private static void onGidReceived(String gid) {
|
||
HaloApp.getInstance().setGid(gid);
|
||
// 更新广告配置
|
||
AdDelegateHelper.INSTANCE.requestAdConfig(false, "", null);
|
||
|
||
getDeviceCertification(gid);
|
||
|
||
// 避免初始化顺序问题导致 MetaUtil 一直持有空的 gid
|
||
MetaUtil.INSTANCE.refreshMeta();
|
||
|
||
AppExecutor.getIoExecutor().execute(() -> {
|
||
ContentValues values = new ContentValues();
|
||
values.put(GhContentProvider.KEY_GID, gid);
|
||
values.put(GhContentProvider.KEY_ANDROID_ID, MetaUtil.getBase64EncodedAndroidId());
|
||
try {
|
||
HaloApp.getInstance().getContentResolver().insert(Uri.parse("content://com.gh.gamecenter.provider/device"), values);
|
||
} catch (Exception exception) {
|
||
SentryHelper.INSTANCE.onEvent("DEVICE_INSERT_ERROR", "exception_digest", exception.getLocalizedMessage());
|
||
exception.printStackTrace();
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 获取应用 gid 绑定的实名信息
|
||
*/
|
||
@SuppressLint("CheckResult")
|
||
public static void getDeviceCertification(String gid) {
|
||
RetrofitManager.getInstance()
|
||
.getApi()
|
||
.getCertification()
|
||
.subscribeOn(Schedulers.io())
|
||
.subscribe(new BiResponse<UserInfoEntity>() {
|
||
@Override
|
||
public void onSuccess(UserInfoEntity data) {
|
||
SPUtils.setString(Constants.SP_DEVICE_CERTIFICATION_PREFIX + gid, GsonUtils.toJson(data));
|
||
|
||
ContentValues values = new ContentValues();
|
||
IdCardEntity idCardEntity = data.getIdCard();
|
||
|
||
if (idCardEntity != null) {
|
||
boolean isCertificated = !TextUtils.isEmpty(data.getIdCard().getId());
|
||
boolean isAdult = data.getIdCard().getMinor() == null || !data.getIdCard().getMinor();
|
||
boolean isCertificating = data.getIdCard().getStatus() == 1;
|
||
|
||
values.put(GhContentProvider.KEY_IS_CERTIFICATED, isCertificated); // 是否认证
|
||
values.put(GhContentProvider.KEY_IS_ADULT, isAdult); // 是否成年
|
||
values.put(GhContentProvider.KEY_IS_CERTIFICATING, isCertificating); // 是否认证中
|
||
|
||
if (!isCertificated) {
|
||
RealNameHelper.updateCertificationStatus(0);
|
||
} else {
|
||
if (isAdult) {
|
||
RealNameHelper.updateCertificationStatus(2);
|
||
} else {
|
||
RealNameHelper.updateCertificationStatus(1);
|
||
}
|
||
}
|
||
} else {
|
||
values.put(GhContentProvider.KEY_IS_CERTIFICATED, false);
|
||
values.put(GhContentProvider.KEY_IS_ADULT, false);
|
||
values.put(GhContentProvider.KEY_IS_CERTIFICATING, false);
|
||
RealNameHelper.updateCertificationStatus(0);
|
||
}
|
||
|
||
RealNameHelper.INSTANCE.onRealNameInfoUpdated();
|
||
|
||
try {
|
||
// Unknown URL content://com.gh.gamecenter.provider/certification
|
||
// TODO 将 com.gh.gamecenter 改成 BuildConfig.ApplicationID
|
||
HaloApp.getInstance().getContentResolver().insert(Uri.parse("content://com.gh.gamecenter.provider/certification"), values);
|
||
} catch (Exception exception) {
|
||
SentryHelper.INSTANCE.onEvent("CERTIFICATION_INSERT_ERROR", "exception_digest", exception.getLocalizedMessage());
|
||
exception.printStackTrace();
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 下次应用启动再上报
|
||
*
|
||
* @param context
|
||
* @param throwable
|
||
*/
|
||
public static void reportException(Context context, Throwable throwable) {
|
||
|
||
CommonDebug.logMethodWithParams(context, "ERRMSG", throwable);
|
||
|
||
// 上传错误数据
|
||
try {
|
||
DataCollectionUtils.uploadError(context, Log.getStackTraceString(throwable));
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
|
||
}
|
||
|
||
}
|