透传消息:透传消息个推只传递数据,不做任何处理,客户端接收到透传消息后需要自己去做后续动作处理,如通知栏展示、弹框等。
如果 服务端 使用纯透传模板推送的消息,需要 app 端埋点 上报展示和点击数据。这里需要注意的是,如果应用也有使用通知模板推送,并携带了透传内容。
app 端需要进行区分判断“是否上报埋点”(可在 服务端透传消息 里面添加一个type字段用以区分纯透传消息,如果是的话则需要调用埋点接口)。
客户端示例代码:
@Override
public void onReceiveMessageData(Context context, GTTransmitMessage msg) {
byte[] payload = msg.getPayload();
String data = new String(payload);
Log.d(TAG, "receiver payload = " + data);//透传消息文本内容
//taskid和messageid字段,是用于回执上报的必要参数。详情见下方示例方法
String taskid = msg.getTaskId();
String messageid = msg.getMessageId();
}
/**
* 上报个推透传消息的展示回执。如果透传消息本地创建通知栏消息“展示”了,则调用此方法上报。
*/
public boolean pushGtShow(Context context, String taskid ,String messageid) {
int gtactionid = 60001;//gtactionid传入60001表示个推渠道消息展示了
boolean result = PushManager.getInstance().sendFeedbackMessage(context, taskid, messageid, gtactionid);
return result;
}
/**
* 上报个推透传消息的点击回执。如果透传消息本地创建通知栏消息被“点击”了,则调用此方法上报。
*/
public boolean pushGtClick(Context context, String taskid ,String messageid) {
int gtactionid = 60002;//gtactionid传入60002表示个推渠道消息点击了
boolean result = PushManager.getInstance().sendFeedbackMessage(context, taskid, messageid, gtactionid);
return result;
}
如果服务端使用 通知+intent 方式推送消息。需要在 intent 中添加S.gttask=;
,添加后个推会自动在 intent 里拼接 taskid 和 actionid,app 端接收到参数以后,上报埋点。
app 端接收到拼接之后的 intent 如下:
intent://com.getui.push/detail?#Intent;scheme=gtpushscheme;launchFlags=0x4000000;package=包名;component=应用包名/activity路径;S.gttask=OSA-0323_4bVmhahaUIYd7lPef8W1qXU9;S.gtaction=actionid;S.payload={payload};end
由于华为、荣耀、oppo无点击数报表返回,vivo无单推点击数报表返回,所以需要您在客户端埋点 上报点击数据。点击厂商通知以后,在触发的activity的 onCreate() 和 onNewIntent方法里面接收相关参数,上报这 3 个离线厂商消息的点击数据。
客户端示例代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
//获取自定义透传参数值
Intent intent = getIntent();
if (null != intent) {
//上报华为、oppo、vivo、荣耀离线点击数据
pushClick(intent);
}
}
//或者在onNewIntent中接收(某些特殊情况下,例如:DemoActivity的启动模式是singleTop、singleTask或者是singleInstance,并且DemoActivity是打开的情况下)
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//获取自定义透传参数值
if (null != intent) {
//上报华为、oppo、vivo、荣耀离线点击数据
pushClick(intent);
}
}
public boolean pushClick(Intent intent) {
boolean result = false;
try {
String taskid = intent.getStringExtra("gttask");
String gtaction = intent.getStringExtra("gtaction");
String clientid = PushManager.getInstance().getClientid(context);
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
// 这里的messageid需要自定义, 保证每条消息汇报的都不相同
String contentToDigest = taskid + clientid + uuid;
byte[] md5s = MessageDigest.getInstance("MD5").digest(contentToDigest.getBytes(StandardCharsets.UTF_8));
String messageid = new BigInteger(1, md5s).toString(16);
/***
* 第三方回执调用接口,可根据业务场景执行
* 注意:只能用下面回执对应的机型进行上报点击测试,其它机型获取不到 gttask 字段
*
* 60020 华为点击
* 60030 oppo点击
* 60040 vivo点击
* 60070 荣耀点击
*
* 埋点接口对应填写获取到的actionid值,如果有获取到 actionid 值,就上报埋点,如 果没有则不用上报。
*
*/
if (gtaction != null) {
int actionid = Integer.parseInt(gtaction);
result = PushManager.getInstance().sendFeedbackMessage(context, taskid, messageid, actionid);
}
} catch (Exception e) {
//…………
}
return result;
}
注:1、个推sdk需要更新到2.14.0.0以上版本;2、vivo的intent长度限制1kb,intent拼接 actionid和taskid以后,会增加intent长度,这个可以根据业务场景适当调整参数内容长度,以免超限。
消息渠道 | 下发 | 到达 | 展示 | 点击 |
---|---|---|---|---|
个推 | √ | √ | √ | √ |
华为 | √ | √ | × | √ |
荣耀 | √ | √ | × | √ |
小米 | √ | √ | √ | √ |
魅族 | √ | √ | √ | √ |
oppo | √ | √ | × | √ |
vivo | √ | √ | √ | √ |
ups | √ | √ | × | √ |