通知点击处理

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

  • 自建通道收到消息后,推送 SDK 会自动发出通知,用户点击后可自动打开网页。

    注意

    推送 SDK 使用的通知 ID 从 10000 开始,请确保您使用的其他通知 ID 不会与之冲突。

  • 厂商通道收到消息后手机系统会自动发出通知,推送 SDK 和开发者都无法干预,只有当用户点击通知后,推送 SDK 才能收到消息,并自动打开网页,如需:

前提条件

  • 本文中的 MPPushMsgServiceAdapter 方法仅适用于基线 10.1.68.32 及以上版本。若当前使用的基线版本低于 10.1.68.32,可参考 mPaaS 升级指南 升级基线版本。

  • 旧版本中的 AliPushRcvService 方法仍可继续使用,如需查看旧版本文档,可 单击此处下载

跳转应用内页面

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

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

<activity android:name=".push.LauncherActivity"
    android:launchMode="singleInstance">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="mpaas" />
    </intent-filter>
</activity>

路由 Activity 中获取 URI 和消息:

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

自定义消息处理

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

public class MyPushMsgService extends MPPushMsgServiceAdapter {

    /**
     * 自建通道收到消息的回调(非厂商通道)
     *
     * @param msg 收到的消息
     * @return 是否处理了消息:
     * 返回 true,则 SDK 不会处理消息,开发者需自行处理收到的消息,包括发通知和通知点击后的跳转
     * 返回 false,则 SDK 会自动发通知和添加通知点击后的跳转
     */
    @Override
    protected boolean onMessageReceive(MPPushMsg msg) {
        Log.d("从自建通道收到消息:" + msg.toString());
        // 自行处理消息,例如发自定义通知
        return true;
    }

    /**
     * 厂商通道的消息展示在通知栏,通知被点击后的回调
     *
     * @param msg 收到的消息
     * @return 是否处理了消息的点击:
     * 返回 true,则 SDK 不会处理厂商通道的通知点击,开发者需自行处理点击后的跳转
     * 返回 false,则 SDK 会自动处理通知点击后的跳转
     */
    @Override
    protected boolean onChannelMessageClick(MPPushMsg msg) {
        Log.d("从厂商通道到的消息被点击:" + msg.toString());
        // 自行处理被点击后的逻辑
        return true;
    }

}

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

String id = msg.getId(); // 消息 ID
boolean isSilent = msg.isSilent(); // 是否静默消息

String title = msg.getTitle(); // 消息标题
String content = msg.getContent(); // 消息内容

String action = msg.getAction(); // 跳转类型,0:URL;1:自定义 DeepLink
String url = msg.getUrl(); // 跳转地址,URL 或 DeepLink

int pushStyle = msg.getPushStyle(); // 消息类型,0:普通消息,1:大文本消息,2:图文消息
String iconUrl = msg.getIconUrl(); // 图文消息的小图标
String imageUrl = msg.getImageUrl(); // 图文消息的图片

String customId = msg.getCustomId(); // 自定义的消息 ID
String params = msg.getParams(); // 扩展参数

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

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

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

  • 静默消息,无需上报。

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

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

阿里云首页 移动开发平台 mPaaS 相关技术圈