package com.gh.common.util; import android.annotation.SuppressLint; import android.app.Application; import android.content.Context; import android.os.Build; import android.provider.Settings; import android.text.TextUtils; import androidx.annotation.Nullable; import com.gh.common.constant.Constants; import com.gh.common.exposure.ExposureEntity; import com.gh.common.exposure.ExposureEvent; import com.gh.common.exposure.ExposureSource; import com.gh.common.exposure.meta.Meta; import com.gh.common.exposure.meta.MetaUtil; import com.gh.common.loghub.LoghubUtils; import com.gh.common.loghub.SimpleLogContainerEntity; import com.gh.gamecenter.BuildConfig; import com.gh.gamecenter.entity.CommunityEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.ShareResultEntity; import com.gh.gamecenter.entity.SpecialColumn; import com.gh.gamecenter.manager.UserManager; import com.gh.gamecenter.qa.entity.Questions; import com.gh.gamecenter.retrofit.EmptyResponse; import com.gh.gamecenter.retrofit.RetrofitManager; import com.halo.assistant.HaloApp; import com.lightgame.utils.Util_System_Phone_State; import com.lightgame.utils.Utils; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; import io.reactivex.schedulers.Schedulers; import okhttp3.MediaType; import okhttp3.RequestBody; /** * Created by khy on 2/01/18. */ public class LogUtils { public static void logVideoStreamingUpload(String action, String entrance, String entranceDetail, String videoId) { JSONObject object = new JSONObject(); JSONObject payloadObject = new JSONObject(); try { object.put("event", "UPLOAD_VIDEO_STEAMING"); object.put("action", action); payloadObject.put("entrance", entrance); payloadObject.put("entrance_detail", entranceDetail); payloadObject.put("video_id", videoId); object.put("payload", payloadObject); } catch (JSONException e) { e.printStackTrace(); } uploadVideoStreaming(object); } public static void uploadCommunityArticle(String tracers, String articleId, String articleTitle, int readTime, CommunityEntity community, SpecialColumn specialColumn) { JSONObject object = new JSONObject(); try { object.put("subject", "community_article"); object.put("community_id", community.getId()); object.put("community_name", community.getName()); object.put("article_id", articleId); object.put("article_name", articleTitle); object.put("tracers", tracers); object.put("read", readTime); JSONObject columnObject = new JSONObject(); if (specialColumn != null) { columnObject.put("type", specialColumn.getType()); columnObject.put("name", specialColumn.getName()); columnObject.put("tab", specialColumn.getTab()); } else { columnObject.put("type", ""); columnObject.put("name", ""); columnObject.put("tab", ""); } object.put("special_column", columnObject); } catch (JSONException e) { e.printStackTrace(); } uploadToCommunity(object); } public static void uploadDevice(LunchType launchType) { JSONObject object = new JSONObject(); Application application = HaloApp.getInstance().getApplication(); try { object.put("subject", "halo_device"); object.put("launch_time", Utils.getTime(application)); object.put("launch_type", launchType.name()); object.put("manufacture", Build.MANUFACTURER); } catch (JSONException e) { e.printStackTrace(); } uploadToCommunity(object, true); } public static void uploadAnswerReadTime(String tracers, int readTime, String answerId, Questions questions, String communityId, String CommunityName, SpecialColumn specialColumn) { JSONObject object = new JSONObject(); try { object.put("subject", "answer"); object.put("community_id", communityId); object.put("community_name", CommunityName); object.put("question_id", questions.getId()); object.put("question_name", questions.getTitle()); object.put("tracers", tracers); object.put("answer_id", answerId); object.put("read", readTime); JSONObject columnObject = new JSONObject(); if (specialColumn != null) { columnObject.put("type", specialColumn.getType()); columnObject.put("name", specialColumn.getName()); columnObject.put("tab", specialColumn.getTab()); } else { columnObject.put("type", ""); columnObject.put("name", ""); columnObject.put("tab", ""); } object.put("special_column", columnObject); } catch (JSONException e) { e.printStackTrace(); } uploadToCommunity(object); } public static void uploadQuestionReadTime(String tracers, int readTime, Questions questions, String communityId, String communityName, SpecialColumn specialColumn) { JSONObject object = new JSONObject(); try { object.put("subject", "question"); object.put("community_id", communityId); object.put("community_name", communityName); object.put("question_id", questions.getId()); object.put("question_name", questions.getTitle()); object.put("tracers", tracers); object.put("read", readTime); JSONObject columnObject = new JSONObject(); if (specialColumn != null) { columnObject.put("type", specialColumn.getType()); columnObject.put("name", specialColumn.getName()); columnObject.put("tab", specialColumn.getTab()); } else { columnObject.put("type", ""); columnObject.put("name", ""); columnObject.put("tab", ""); } object.put("special_column", columnObject); } catch (JSONException e) { e.printStackTrace(); } uploadToCommunity(object); } public static void uploadSearch(String searchKey) { if (TextUtils.isEmpty(searchKey)) return; JSONObject object = new JSONObject(); try { object.put("community_id", UserManager.getInstance().getCommunity().getId()); object.put("community_name", UserManager.getInstance().getCommunity().getName()); object.put("keyword", searchKey); object.put("subject", "search"); } catch (JSONException e) { e.printStackTrace(); } uploadToCommunity(object); } public static void communityRefresh(int dataCount, boolean manualRefresh) { JSONObject object = new JSONObject(); try { object.put("subject", "community_refresh"); object.put("community_id", UserManager.getInstance().getCommunity().getId()); object.put("refresh_type", "recommend"); object.put("refresh_way", manualRefresh ? "manual" : "auto"); object.put("data_count", dataCount); } catch (JSONException e) { e.printStackTrace(); } uploadToCommunity(object); } public static void login(String loginStep, String loginType, String entrance) { JSONObject object = new JSONObject(); try { object.put("entrance", entrance); object.put("subject", "login"); object.put("step", loginStep); object.put("login_type", loginType); } catch (JSONException e) { e.printStackTrace(); } uploadToCommunity(object, true); } public static void qaAccess(String access, CommunityEntity communityEntity) { JSONObject object = new JSONObject(); try { object.put("subject", "qa_access"); object.put("access", access); object.put("community_id", communityEntity.getId()); object.put("community_name", communityEntity.getName()); } catch (JSONException e) { e.printStackTrace(); } uploadToCommunity(object); } public static void logReservation(GameEntity gameEntity, @Nullable ExposureEvent event) { JSONObject object = new JSONObject(); List exposureSourceList; if (event == null) { exposureSourceList = new ArrayList<>(); exposureSourceList.add(new ExposureSource("其它", "")); } else { exposureSourceList = event.getSource(); } try { object.put("source", GsonUtils.toJson(exposureSourceList)); object.put("game_name", gameEntity.getName()); object.put("game_id", gameEntity.getId()); object.put("game_platform", gameEntity.getPlatform()); } catch (JSONException e) { e.printStackTrace(); } uploadToReservation(object); } private static void uploadToCommunity(JSONObject object) { uploadToCommunity(object, false); } private static void uploadToCommunity(JSONObject object, boolean forcedUpload) { if (BuildConfig.DEBUG) { Utils.log("LogUtils->" + object.toString()); } Context context = HaloApp.getInstance().getApplication(); try { object.put("version", PackageUtils.getVersionName()); object.put("channel", HaloApp.getInstance().getChannel()); object.put("android_id", Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)); object.put("time", Utils.getTime(context)); object.put("network", DeviceUtils.getNetwork(context)); object.put("user_id", UserManager.getInstance().getUserId()); object.put("device_system", android.os.Build.VERSION.RELEASE); object.put("device_model", android.os.Build.MODEL); object.put("imei", Util_System_Phone_State.getImei(HaloApp.getInstance() .getApplication())); object.put("G_ID", UserManager.getInstance().getDeviceId()); } catch (JSONException e) { e.printStackTrace(); } // 暂时除了曝光外的数据都是扔到 community 这个库的,要是不是这个这个库的话这里要改一下 LoghubUtils.log(object, "community", forcedUpload); } /** * 上传数据到“预约”的 logStore */ private static void uploadToReservation(JSONObject object) { Context context = HaloApp.getInstance().getApplication(); try { object.put("version", PackageUtils.getVersionName()); object.put("channel", HaloApp.getInstance().getChannel()); object.put("android_id", Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)); object.put("time", Utils.getTime(context)); object.put("network", DeviceUtils.getNetwork(context)); object.put("user_id", UserManager.getInstance().getUserId()); object.put("device_system", android.os.Build.VERSION.RELEASE); object.put("device_model", android.os.Build.MODEL); object.put("imei", Util_System_Phone_State.getImei(HaloApp.getInstance() .getApplication())); object.put("G_ID", UserManager.getInstance().getDeviceId()); } catch (JSONException e) { e.printStackTrace(); } LoghubUtils.log(object, "appointment", false); } private static void uploadVideoStreaming(JSONObject object) { Meta meta = MetaUtil.INSTANCE.getMeta(); JSONObject metaObject = new JSONObject(); try { metaObject.put("android_id", meta.getAndroid_id()); metaObject.put("android_sdk", meta.getAndroid_sdk()); metaObject.put("android_version", meta.getAndroid_version()); metaObject.put("appVersion", meta.getAppVersion()); metaObject.put("channel", meta.getChannel()); metaObject.put("gid", meta.getGid()); metaObject.put("imei", meta.getImei()); metaObject.put("mac", meta.getMac()); metaObject.put("manufacturer", meta.getManufacturer()); metaObject.put("model", meta.getModel()); metaObject.put("network", meta.getNetwork()); metaObject.put("os", meta.getOs()); metaObject.put("userId", meta.getUserId()); object.put("meta", metaObject); object.put("timestamp", System.currentTimeMillis() / 1000); } catch (JSONException e) { e.printStackTrace(); } if (BuildConfig.DEBUG) { Utils.log("LogUtils->" + object.toString()); } LoghubUtils.log(object, "video_streaming", false); } public static void uploadVideoStreamingEnter(String entrance, String entranceDetail, String videoId, String streamingId) { JSONObject object = new JSONObject(); JSONObject payloadObject = new JSONObject(); try { object.put("event", "ENTERING_VIDEO_STEAMING"); payloadObject.put("entrance", entrance); if (!TextUtils.isEmpty(entranceDetail)) { payloadObject.put("entrance_detail", entranceDetail); } payloadObject.put("video_id", videoId); payloadObject.put("streaming_id", streamingId); object.put("payload", payloadObject); } catch (JSONException e) { e.printStackTrace(); } uploadVideoStreaming(object); } public static void uploadVideoStreamingPlaying(String action, String msg, String entrance, String entranceDetail, String videoId, String streamingId, double videoSize, int videoTotalTime, int progress, String videoPlayStatus) { JSONObject object = new JSONObject(); JSONObject payloadObject = new JSONObject(); try { object.put("event", "VIDEO_PLAYING"); object.put("action", action); if (!TextUtils.isEmpty(msg)) { object.put("msg", msg); } payloadObject.put("entrance", entrance); if (!TextUtils.isEmpty(entranceDetail)) { payloadObject.put("entrance_detail", entranceDetail); } payloadObject.put("video_id", videoId); payloadObject.put("streaming_id", streamingId); if (videoSize > 0) { payloadObject.put("video_size", videoSize); } if (videoTotalTime > 0) { payloadObject.put("video_total_time", videoTotalTime); } payloadObject.put("progress", progress); payloadObject.put("video_play_status", videoPlayStatus); object.put("payload", payloadObject); } catch (JSONException e) { e.printStackTrace(); } uploadVideoStreaming(object); } public static void uploadWelcomeDialog(String action, String dialogId, String linkTitle) { ExposureEntity payload = new ExposureEntity(); payload.setWelcomeDialogId(dialogId); payload.setWelcomeDialogId(linkTitle); SimpleLogContainerEntity entity = new SimpleLogContainerEntity(); entity.setEvent("dialog"); entity.setAction(action); entity.setMeta(MetaUtil.INSTANCE.getMeta()); entity.setPayload(payload); entity.setTimestamp(System.currentTimeMillis() / 1000); LoghubUtils.log(GsonUtils.toJsonIgnoreNull(entity), "event", false); } public static void uploadLikeFromWelcomeDialog() { String dialogId = (String) HaloApp.get(Constants.WELCOME_DIALOG_ID, false); String linkTitle = (String) HaloApp.get(Constants.WELCOME_DIALOG_LINK_TITLE, false); ExposureEntity payload = new ExposureEntity(); payload.setWelcomeDialogId(dialogId); payload.setWelcomeDialogLinkTitle(linkTitle); SimpleLogContainerEntity entity = new SimpleLogContainerEntity(); entity.setEvent("like"); entity.setMeta(MetaUtil.INSTANCE.getMeta()); entity.setPayload(payload); entity.setTimestamp(System.currentTimeMillis() / 1000); LoghubUtils.log(GsonUtils.toJsonIgnoreNull(entity), "event", false); } public static void uploadCommentFromWelcomeDialog() { String dialogId = (String) HaloApp.get(Constants.WELCOME_DIALOG_ID, false); String linkTitle = (String) HaloApp.get(Constants.WELCOME_DIALOG_LINK_TITLE, false); ExposureEntity payload = new ExposureEntity(); payload.setWelcomeDialogId(dialogId); payload.setWelcomeDialogLinkTitle(linkTitle); SimpleLogContainerEntity entity = new SimpleLogContainerEntity(); entity.setEvent("comment"); entity.setMeta(MetaUtil.INSTANCE.getMeta()); entity.setPayload(payload); entity.setTimestamp(System.currentTimeMillis() / 1000); LoghubUtils.log(GsonUtils.toJsonIgnoreNull(entity), "event", false); } private static void uploadShare(JSONObject object) { Meta meta = MetaUtil.INSTANCE.getMeta(); JSONObject metaObject = new JSONObject(); try { metaObject.put("android_id", meta.getAndroid_id()); metaObject.put("android_sdk", meta.getAndroid_sdk()); metaObject.put("android_version", meta.getAndroid_version()); metaObject.put("appVersion", meta.getAppVersion()); metaObject.put("channel", meta.getChannel()); metaObject.put("gid", meta.getGid()); metaObject.put("imei", meta.getImei()); metaObject.put("mac", meta.getMac()); metaObject.put("manufacturer", meta.getManufacturer()); metaObject.put("model", meta.getModel()); metaObject.put("network", meta.getNetwork()); metaObject.put("os", meta.getOs()); metaObject.put("userId", meta.getUserId()); object.put("event", "SHARE"); object.put("meta", metaObject); object.put("timestamp", System.currentTimeMillis() / 1000); } catch (JSONException e) { e.printStackTrace(); } if (BuildConfig.DEBUG) { Utils.log("LogUtils->" + object.toString()); } LoghubUtils.log(object, "event", false); } public static void uploadShareEnter(String entrance, String url, String title, String summary, String resourceId) { JSONObject object = new JSONObject(); JSONObject payloadObject = new JSONObject(); try { object.put("action", "entrance_source"); payloadObject.put("entrance", entrance); payloadObject.put("url", url); payloadObject.put("title", title); payloadObject.put("summary", summary); payloadObject.put("resource_id", resourceId); object.put("payload", payloadObject); } catch (JSONException e) { e.printStackTrace(); } uploadShare(object); } public static void uploadShareType(String shareType, String entrance, String url, String title, String summary, String resourceId) { JSONObject object = new JSONObject(); JSONObject payloadObject = new JSONObject(); try { object.put("action", "share_type"); payloadObject.put("share_type", shareType); payloadObject.put("entrance", entrance); payloadObject.put("url", url); payloadObject.put("title", title); payloadObject.put("summary", summary); payloadObject.put("resource_id", resourceId); object.put("payload", payloadObject); } catch (JSONException e) { e.printStackTrace(); } uploadShare(object); } @SuppressLint("CheckResult") public static void uploadShareResult(String shareType, String entrance, String shareResult, String url, String title, String summary, String resourceId) { JSONObject object = new JSONObject(); JSONObject payloadObject = new JSONObject(); try { object.put("action", "share_result"); payloadObject.put("share_type", shareType); payloadObject.put("entrance", entrance); payloadObject.put("share_result", shareResult); payloadObject.put("url", url); payloadObject.put("title", title); payloadObject.put("summary", summary); payloadObject.put("resource_id", resourceId); object.put("payload", payloadObject); } catch (JSONException e) { e.printStackTrace(); } uploadShare(object); ShareResultEntity entity = new ShareResultEntity(new ShareResultEntity.Content(url, title, summary), shareType, shareResult); RequestBody body = RequestBody.create(MediaType.parse("application/json"), GsonUtils.toJson(entity)); RetrofitManager.getInstance(HaloApp.getInstance().getApplication()).getApi() .postShareResult(body) .subscribeOn(Schedulers.io()) .subscribe(new EmptyResponse<>()); } }