通知点击处理

对于已接入厂商通道,并且运行在对应厂商手机上的应用,服务端推送消息时默认优先推向厂商通道;对于其他应用,服务端推送消息时会推向自建通道。

  • 自建通道收到消息后,推送 SDK 会自动发出通知,用户点击后可自动打开网页。
    注意:推送 SDK 使用的通知 ID 从 10000 开始,请确保您使用的其他通知 ID 不会与之冲突。
  • 厂商通道收到消息后手机系统会自动发出通知,推送 SDK 和开发者都无法干预,只有当用户点击通知后,推送 SDK 才能收到消息,并自动打开网页,如需:

前提条件

  • 本文中的 MPPushMsgServiceAdapter 方法仅适用于基线 10.1.68.32 及以上版本。若当前使用的基线版本低于 10.1.68.32,可参考 mPaaS 升级指南 升级基线版本。
  • 旧版本中的 AliPushRcvService 方法仍可继续使用,如您需要浏览旧版本文档,请 提交工单 或联系 mPaaS 支持人员。

跳转应用内页面

如需跳转到应用内的指定页面,可以在推送消息的跳转地址里填入自定义的 DeepLink,例如 mpaas://navigate,同时在应用内设置一个路由 Activity 来接收 DeepLink,再分发到其他页面。

路由 Activity 需要在 AndroidManifest.xml 中添加相应的 intent-filter,例如:

  1. <activity android:name=".push.LauncherActivity"
  2. android:launchMode="singleInstance">
  3. <intent-filter>
  4. <action android:name="android.intent.action.VIEW" />
  5. <category android:name="android.intent.category.BROWSABLE" />
  6. <category android:name="android.intent.category.DEFAULT" />
  7. <data android:scheme="mpaas" />
  8. </intent-filter>
  9. </activity>

路由 Activity 中获取 URI 和消息:

  1. Uri uri = intent.getData();
  2. MPPushMsg msg = intent.getParcelableExtra("mp_push_msg");

自定义消息处理

如需自行处理消息,可以重写 MPPushMsgServiceAdapteronMessageReceiveonChannelMessageClick 方法:

  1. public class MyPushMsgService extends MPPushMsgServiceAdapter {
  2. /**
  3. * 自建通道收到消息的回调(非厂商通道)
  4. *
  5. * @param msg 收到的消息
  6. * @return 是否处理了消息:
  7. * 返回 true,则 SDK 不会处理消息,开发者需自行处理收到的消息,包括发通知和通知点击后的跳转
  8. * 返回 false,则 SDK 会自动发通知和添加通知点击后的跳转
  9. */
  10. @Override
  11. protected boolean onMessageReceive(MPPushMsg msg) {
  12. Log.d("从自建通道收到消息:" + msg.toString());
  13. // 自行处理消息,例如发自定义通知
  14. return true;
  15. }
  16. /**
  17. * 厂商通道的消息展示在通知栏,通知被点击后的回调
  18. *
  19. * @param msg 收到的消息
  20. * @return 是否处理了消息的点击:
  21. * 返回 true,则 SDK 不会处理厂商通道的通知点击,开发者需自行处理点击后的跳转
  22. * 返回 false,则 SDK 会自动处理通知点击后的跳转
  23. */
  24. @Override
  25. protected boolean onChannelMessageClick(MPPushMsg msg) {
  26. Log.d("从厂商通道到的消息被点击:" + msg.toString());
  27. // 自行处理被点击后的逻辑
  28. return true;
  29. }
  30. }

其中 MPPushMsg 封装了消息的所有参数:

  1. String id = msg.getId(); // 消息 ID
  2. boolean isSilent = msg.isSilent(); // 是否静默消息
  3. String title = msg.getTitle(); // 消息标题
  4. String content = msg.getContent(); // 消息内容
  5. String action = msg.getAction(); // 跳转类型,0:URL;1:自定义 DeepLink
  6. String url = msg.getUrl(); // 跳转地址,URL 或 DeepLink
  7. int pushStyle = msg.getPushStyle(); // 消息类型,0:普通消息,1:大文本消息,2:图文消息
  8. String iconUrl = msg.getIconUrl(); // 图文消息的小图标
  9. String imageUrl = msg.getImageUrl(); // 图文消息的图片
  10. String customId = msg.getCustomId(); // 自定义的消息 ID
  11. String params = msg.getParams(); // 扩展参数

如自行处理消息后,可能还需要自行上报消息埋点,否则控制台的推送使用分析将无法统计到正确的数据:

  1. MPPush.reportPushOpen(msg); // 上报消息被打开
  2. MPPush.reportPushIgnored(msg); // 上报消息被忽略

其中,对于自建通道的消息:

  • 静默消息,无需上报。
  • 非静默消息,需要上报被打开和被忽略的消息,可通过 Notification.BuildersetContentIntentsetDeleteIntent 方法或其他有效方式来监听消息被用户打开和忽略。

对于厂商通道的消息,无需自行上报。