前言
通過集成MessageReceiver
/AliyunMessageIntentService
,可以攔截通知,接收消息,獲取推送中的擴展字段。或者在通知打開或刪除的時候進行后續處理。
MessageReceiver
和AliyunMessageIntentService
是處理推送數據的兩種實現方式,它們具有同樣的擴展接口,您僅需要任選一種方式即可。
集成MessageReceiver(二選一)
1 實現自定義的MessageReceiver
繼承com.alibaba.sdk.android.push.MessageReceiver
。
2 注冊自定義的Messagereceiver
在您的AndroidManifest.xml文件(通常是<project>/<app-module>/src/main/AndroidManifest.xml
)中,在application
節點下注冊自定義的MessageReceiver。
<!--消息接收監聽器-->
<receiver android:name="com.alibaba.sdk.android.push.MessageReceiver"
android:exported="false"> <-- 在這里替換成您自己的receiver -->
<intent-filter>
<action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
</intent-filter>
<intent-filter>
<action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
</intent-filter>
<intent-filter>
<action android:name="com.alibaba.sdk.android.push.RECEIVE" />
</intent-filter>
</receiver>
3 處理推送通知和推送消息
在MessageReceiver
內可以處理推送通知、推送消息和通知點擊事情,具體API請分別查看推送消息類型和推送通知類型。
集成AliyunMessageIntentService(二選一)
1 實現自定義的MessageIntentService
繼承com.alibaba.sdk.android.push.AliyunMessageIntentService
。
2 注冊自定義的MessageIntentService
在您的AndroidManifest.xml文件(通常是<project>/<app-module>/src/main/AndroidManifest.xml
)中,在application
節點下注冊自定義的MessageIntentService。
<service android:name="com.alibaba.sdk.android.push.AliyunMessageIntentService"
android:exported="false"> <-- 在這里替換成您自己的service -->
<intent-filter>
<action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
</intent-filter>
<intent-filter>
<action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
</intent-filter>
<intent-filter>
<action android:name="com.alibaba.sdk.android.push.RECEIVE" />
</intent-filter>
</service>
3 設置使用MessageIntentService
SDK默認是支持MessageReceiver
處理消息的,如果要使用MessageIntentService
,您需要調用
CloudPushService
的setPushIntentService
。
val service = PushServiceFactory.getCloudPushService()
service.setPushIntentService(MyMessageIntentService.class) //在這里替換成您自己的service
final CloudPushService service = PushServiceFactory.getCloudPushService();
service.setPushIntentService(MyMessageIntentService.class); //在這里替換成您自己的service
4 處理推送通知和推送消息
在MessageIntentService
內可以處理推送通知、推送消息和通知點擊事情,具體API請分別查看推送消息類型和推送通知類型。
推送消息類型
用于接收服務端推送的消息,消息不會彈窗,而是回調該方法。
如果您要通過OpenApi/控制臺推送消息類型,必須在這個回調方法里處理消息數據,SDK默認不會處理消息類型數據。
onMessage
收到推送消息的回調,可以在這里處理推送消息。
接口定義
void onMessage(Context context, CPushMessage message)
所屬類
MessageReceiver
/AliyunMessageIntentService
參數說明
參數 | 類型 | 說明 |
context | Context | android組件上下文。 |
message | CPushMessage | 推送的消息數據結構。 |
推送通知類型
用于接收服務端推送的通知,通知SDK會默認彈出通知,接收通知以及點擊通知等都有回調。
SDK默認會處理推送通知類型,以通知形式進行交互。同時也支持攔截通知和自定義通知樣式,但您需要擴展相應的API進行處理。
showNotificationNow
是否立即顯示通知,此方法用于控制是否將推送通知交給SDK默認處理還是由用戶自行處理。如果返回false,則您需要在onNotificationReceivedInApp內處理該推送通知。
接口定義
boolean showNotificationNow(Context context, Map<String, String> map)
所屬類
MessageReceiver
/AliyunMessageIntentService
參數說明
參數 | 類型 | 說明 |
context | Context | android組件上下文。 |
map | Map<String, String> | 推送消息數據。 |
返回說明
類型 | 說明 |
boolean |
|
onNotification
推送通知到達回調。SDK收到通知后,回調該方法,可獲取到并處理通知相關的參數。
接口定義
void onNotification(Context context, String title, String summary, Map<String, String> extraMap)
所屬類
MessageReceiver
/AliyunMessageIntentService
參數說明
參數 | 類型 | 說明 |
context | Context | android組件上下文。 |
title | String | 通知標題。 |
summary | String | 通知內容。 |
extraMap | Map<String, String> | 通知額外參數,包括部分系統自帶參數:
|
onNotificationOpened
點擊通知回調。點擊通知會回調該方法。
接口定義
void onNotificationOpened(Context context, String title, String summary, String extraMap)
所屬類
MessageReceiver
/AliyunMessageIntentService
參數說明
參數 | 類型 | 說明 |
context | Context | android組件上下文。 |
title | String | 通知標題。 |
summary | String | 通知內容。 |
extraMap | String | 通知額外參數,JSON格式,包括部分系統自帶參數:
|
onNotificationClickedWithNoAction
點擊無跳轉邏輯通知的回調,點擊無跳轉邏輯(open=4)通知時回調該方法(v2.3.2及以上版本支持)。
接口定義
void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap)
所屬類
MessageReceiver
/AliyunMessageIntentService
參數說明
參數 | 類型 | 說明 |
context | Context | android組件上下文。 |
title | String | 通知標題。 |
summary | String | 通知內容。 |
extraMap | String | 通知額外參數,JSON格式,包括部分系統自帶參數:
|
onNotificationRemoved
刪除通知的回調。刪除通知時會回調該方法。
接口定義
void onNotificationRemoved(Context context, String messageId)
所屬類
MessageReceiver
/AliyunMessageIntentService
參數說明
參數 | 類型 | 是否必填 | 說明 |
context | Context | 是 | android組件上下文。 |
messageId | String | 是 | 刪除通知的Id。 |
onNotificationReceivedInApp
通知在應用內回調,該方法僅在showNotificationNow返回false時才會被回調,且此時不調用onNotification,此時需要您自己處理通知邏輯。
當用戶創建自定義通知樣式,并且設置推送應用內到達不創建通知彈窗時調用該回調。
接口定義
void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl)
所屬類
MessageReceiver
/AliyunMessageIntentService
參數說明
參數 | 類型 | 說明 |
context | Context | android組件上下文。 |
title | String | 通知標題。 |
summary | String | 通知內容。 |
extraMap | Map<String, String> | 通知額外參數。 |
openType | int | 原本通知打開方式,1:打開APP;2:打開activity;3:打開URL;4:無跳轉邏輯。 |
openActivity | String | 所要打開的activity的名稱,僅當服務端參數openType=2時有效,其余情況為null。 |
openUrl | String | 所要打開的URL,僅當服務端參數openType=3時有效,其余情況為null。 |