环信推送提供谷歌、小米、魅族、OPPO、vivo、华为厂商通道的送达、点击数据统计功能。
登陆 魅族开放平台,点击【Flyme 推送】
根据所在集群设置回调地址(配置 http)
格式为:http://域名/orgname/appname/push/report/meizu
您可以在环信后台,即时通讯 → 服务概览 中查看当前 Appkey 的 Rest API 域名地址,仅支持填写 easemob.com
类型
登陆 华为消息推送平台,点击【我的项目】
根据所在集群设置回调地址(配置 https,注意:华为只支持https地址配置)
格式为:https://域名/orgname/appname/push/report/huawei
您可以在环信后台,即时通讯 → 服务概览 中查看当前 Appkey 的 Rest API 域名地址,仅支持填写 easemob.com
类型
继承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();
}
}