自定义推送通知样式
接收到推送消息后,系统会弹出通知,显示推送消息。
- FCM 类型推送:针对 FCM 类型推送方式,如果在控制台设置的推送方式为透传消息方式,可通过以下方式自定义通知样式。
- 融云自建推送:可通过以下方式自定义通知样式。但因到达率较低,已不推荐使用。
- 其他第三方类型推送:SDK 接收到其他第三方厂商的推送后,弹出的通知是系统通知,由手机系统底层直接弹出通知,所以不支持自定义。
自定义通知样式
如果您使用 FCM 推送,且 FCM 后台配置消息推送方式为透传消息方式时,可通过以下方式自定义通知样式。
使用 PushEventListener
您可以设置 PushEventListener
,覆写 preNotificationMessageArrived
方法,拦截通知事件并自定义显示。
提示
- SDK 从 5.1.0 版本开始支持该功能。
- 请在 Application 的
onCreate
方法中注册监听器。 - 由于 Android 12 通知 trampoline 限制的原因,当您的 App 的 targetVersion >= 31 时,建议直接在
RongPushClient.setPushEventListener
中的回调中直接启动 Activity。请勿再通过广播或者服务再进行消息分发之后再启动 Activity。
RongPushClient.setPushEventListener(
new PushEventListener() {
@Override
public boolean preNotificationMessageArrived(
Context context,
PushType pushType,
PushNotificationMessage notificationMessage) {
// 该回调仅在通知类型为透传消息时生效。返回 true 表示拦截,false 为不拦截
return false;
}
@Override
public void afterNotificationMessageArrived(
Context context,
PushType pushType,
PushNotificationMessage notificationMessage) {
// 该回调仅在通知类型为透传消息时生效
}
@Override
public boolean onNotificationMessageClicked(
Context context,
PushType pushType,
PushNotificationMessage notificationMessage) {
// 用户可以在此定义自己的通知的点击事件业务,返回 true 表示拦截,false 为不拦截
return false;
}
@Override
public void onThirdPartyPushState(
PushType pushType, String action, long resultCode) {}
});
使用 PushMessageReceiver
您也可以通过 PushMessageReceiver
的 onNotificationMessageArrived
方法自定义 FCM 通知样式。该方式优先级低于 PushEventListener
。
提示
由于 Android 12 通知 trampoline 限制的原因,当您的 App 的 targetVersion >= 31 时,建议直接在 PushMessageReceiver
的回调中直接启动 Activity。请勿再通过广播或者服务再进行消息分发之后再启动 Activity。
-
创建自定义
YourCustomPushMessageReceiver
,并继承PushMessageReceiver
。在onNotificationMessageArrived
(通知到达事件)中可收到推送内容。public class YourCustomMessageReceiver extends PushMessageReceiver {
@Override
public boolean onNotificationMessageClicked(
Context context, PushType pushType, PushNotificationMessage message) {
if (pushType.equals(PushType.GOOGLE_FCM)){
// TODO
}
// 返回 true 表示拦截,false 为不拦截
return true;
}
} -
在主工程的
AndroidManifest.xml
中注册您自定义的推送广播接收组件。请注意替换AndroidManifest.xml
中已添加的PushMessageReceiver
注册内容。<receiver
android:name="xxx.YourCustomPushMessageReceiver"
android:exported="true">
<intent-filter>
<action android:name="io.rong.push.intent.MESSAGE_ARRIVED" />
<action android:name="io.rong.push.intent.MESSAGE_CLICKED" />
<action android:name="io.rong.push.intent.THIRD_PARTY_PUSH_STATE" />
</intent-filter>
</receiver>