====== Andriod 厂商统计 ====== 环信推送提供谷歌、小米、魅族、OPPO、vivo、华为厂商通道的送达、点击数据统计功能。 ===== 送达设置 ===== ==== 1、魅族需要设置回调白名单才能实现相关功能。方法如下: ==== === 1.1、登陆魅族官方平台 === 登陆 [[https://open.flyme.cn|魅族开放平台]],点击【Flyme 推送】\\ {{:playground:push:apppush:魅族开放平台.png|}} === 1.2、选择配置应用 === 选择您要设置的应用名称,点击【打开应用】\\ {{:playground:push:apppush:魅族打开应用.png|}} === 1.3、设置回调地址 === 根据所在集群设置回调地址(配置 http)\\ 格式为:''%%http://域名/orgname/appname/push/report/meizu%%'' \\ {{:playground:push:apppush:魅族配置回调地址.png|}} 您可以在环信后台,**即时通讯** → **服务概览** 中查看当前 Appkey 的 Rest API 域名地址,仅支持填写 ''%%easemob.com%%'' 类型 {{:playground:push:apppush:域名位置.png|}} === 1.4、开启送达回执 === 魅族平台设置完回执地址后,需要在环信开发者后台,**即时推送** → **配置证书** → **魅族** 配置中开启推送送达回执,才能获取到魅族通道送达数据。 {{:playground:push:apppush:魅族开启回调.png|}} ==== 2、华为需要进行推送回执配置才能实现相关功能。方法如下: ==== === 2.1、登陆华为官方平台 === 登陆 [[https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/|华为消息推送平台]],点击【我的项目】\\ {{:playground:push:apppush:登陆华为官方平台.png|}} === 2.2、选择配置应用 === 选择您要设置的应用名称,点击【推送服务】,点击【配置】\\ {{:playground:push:apppush:华为选择配置应用.png|}} === 2.3、开通应用回执状态 === 开通回执状态\\ {{:playground:push:apppush:华为开通应用回执状态.png|}} === 2.4、测试并添加回执 === 填写回执配置,测试回执通过后进行提交 {{:playground:push:apppush:华为测试并添加回执.png|}} == 2.4.1、回调地址 == 根据所在集群设置回调地址(配置 https,注意:华为只支持https地址配置)\\ 格式为:''%%https://域名/orgname/appname/push/report/huawei%%'' \\ 您可以在环信后台,**即时通讯** → **服务概览** 中查看当前 Appkey 的 Rest API 域名地址,仅支持填写 ''%%easemob.com%%'' 类型 {{:playground:push:apppush:域名位置.png|}} == 2.4.2、证书内容 == {{ :playground:push:apppush:easemob.txt.zip |}} 证书内容在2023年3月4日过期,环信将在2023年2月进行更新,届时您需要同步更新 \\ \\ \\ ==== 3、FCM 客户端处理上报 ==== 继承''%%FirebaseMessagingService%%''的''%%Service%%''里去实现''%%handleIntent%%''方法,添加上报送达事件的代码 public class EMFCMMSGService extends FirebaseMessagingService { @Override public void handleIntent(@NonNull Intent intent) { super.handleIntent(intent); Bundle bundle = intent.getExtras(); if(bundle != null){ String push = bundle.getString("EPush"); if(push != null){ try { String taskId = ""; JSONObject pushJson = new JSONObject(push); String provider = pushJson.optString("provider"); JSONObject report = pushJson.optJSONObject("report"); if(report != null){ taskId = report.optString("task_id"); } EMClient.getInstance().pushManager().asyncReportPushAction(taskId, provider, EMPushManager.EMPushAction.ARRIVE, new EMCallBack() {}); } catch (JSONException e) { e.printStackTrace(); } } } } } 启动页的''%%onCreate%%''里添加上报点击事件的代码 Bundle bundle = getIntent().getExtras(); if(bundle !=null){ String push = bundle.getString("EPush"); if(push != null){ try { String taskId = ""; JSONObject pushJson = new JSONObject(push); String provider = pushJson.optString("provider"); JSONObject report = pushJson.optJSONObject("report"); if(report != null){ taskId = report.optString("task_id"); } EMClient.getInstance().pushManager().asyncReportPushAction(taskId, provider, EMPushManager.EMPushAction.CLICK, new EMCallBack() {}); } catch (JSONException e) { e.printStackTrace(); } } } ===== 点击事件上报 ===== 厂商推送的点击事件上报,需要在 App 端调用 API 上报实现统计。 //taskId 与 provider 需从推送数据里获取,如果获取 taskId 失败则传空字符串 EMClient.getInstance().pushManager().asyncReportPushAction(taskId, provider, action, new EMCallBack(){}); 以小米推送为例,在厂商的点击回调里去解析上报点击事件。 public void onNotificationMessageClicked(Context context, MiPushMessage message) { String content = message.getContent(); try { // JSON 结构为 {"EPush":{"provider":{"xxx"},"report":{"task_id":"xxx"}}} JSONObject json = new JSONObject(content); JSONObject pushJson = json.optJSONObject("EPush"); String taskId = ""; if(pushJson != null){ String provider = pushJson.optString("provider"); JSONObject reportJson = pushJson.optJSONObject("report"); if(reportJson != null){ taskId = reportJson.optString("task_id"); } EMClient.getInstance().pushManager().asyncReportPushAction(taskId, provider, EMPushManager.EMPushAction.CLICK, new EMCallBack() {}); } } catch (JSONException e) { e.printStackTrace(); } }