因公司需要服猪,最近在項目中接入了個推饼拍,中間遇到了一些問題彬犯,經(jīng)過查找資料和咨詢個推客服也都順利解決了向楼,故此記錄一下,希望可以幫到有需要的同學(xué)谐区。
1. 個推介紹
(1)創(chuàng)建應(yīng)用的時候湖蜕,只能上傳一個推送證書,所以會面臨證書的多次切換的麻煩宋列,后面會有介紹如何解決證書切換的問題昭抒。
(2)對于安卓端,有推送通知和透傳消息兩種方式炼杖;而對于iOS灭返,只有透傳消息,但是可以通過設(shè)置 content-available 的值來實現(xiàn)安卓端的兩種方式坤邪。當content-available為0時熙含,和安卓端的推送通知同效果;當content-available為1時艇纺,和安卓端的透傳消息同效果怎静。
(3)當App出于活躍狀態(tài)時,透傳消息通過個推通到發(fā)送給App黔衡;當App后臺運行或者被后臺清掉時消约,個推平臺會給蘋果 APNs 推送消息,同時保存?zhèn)€推通道的離線消息员帮,當 SDK 重新上線后或粮,個推平臺會重新推送所有離線的消息。
2. 通知欄的點擊事件的處理
當App處于后臺運行或者被后臺清掉時捞高,APNs推送的消息會在通知欄顯示氯材,通知欄的點擊事件的處理和App的系統(tǒng)版本有關(guān)渣锦。
- 在iOS 10及以后版本,在下面的代理方法中做點擊通知欄跳轉(zhuǎn)處理:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
//將收到的APNs信息傳給個推統(tǒng)計
GeTuiSdk.handleRemoteNotification(response.notification.request.content.userInfo);
completionHandler();
//推送跳轉(zhuǎn)
let userInfo = response.notification.request.content.userInfo
if UIApplication.shared.applicationState != .active {
//處理跳轉(zhuǎn)
//...
}
}
- 在iOS 10以前版本氢哮,在下面的代理方法中做點擊通知欄跳轉(zhuǎn)處理:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
//將收到的APNs信息傳給個推統(tǒng)計
GeTuiSdk.handleRemoteNotification(userInfo);
completionHandler(UIBackgroundFetchResult.newData);
//處理跳轉(zhuǎn)
//...
}
3. App活躍狀態(tài)收到消息的處理
上面說了App處于后臺運行或者被后臺清掉時袋毙,通知欄會收到消息,可以通過點擊跳轉(zhuǎn)到指定界面冗尤;那么當App處于活躍狀態(tài)時听盖,收到透傳消息該怎么處理呢?一般情況下會選擇給用戶彈出一個提示框裂七,讓用戶來選擇是否查看皆看,這個處理會在下面?zhèn)€推的代理方法中做處理:
func geTuiSdkDidReceivePayloadData(_ payloadData: Data!, andTaskId taskId: String!, andMsgId msgId: String!, andOffLine offLine: Bool, fromGtAppId appId: String!) {
if UIApplication.shared.applicationState == .active {
//處理跳轉(zhuǎn)
//...
}
}
4.靜默推送
在上面已經(jīng)說過iOS端只有透傳消息的方式,當把 content-available 的值設(shè)置為1時背零,就相當于安卓端的透傳消息腰吟,此時推送的效果是:如果App處于后臺或者被后臺清掉時,應(yīng)用會收到這個消息徙瓶,但是不會有彈窗提示毛雇,這時我們可以做一些操作,比如說彈個紅包view侦镇,當用戶下次打開App時灵疮,便會主動彈出我們要顯示的紅包view。在iOS這里壳繁,這種推送叫靜默推送震捣,其回調(diào)在下面代理方法中:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
//將收到的APNs信息傳給個推統(tǒng)計
GeTuiSdk.handleRemoteNotification(userInfo);
completionHandler(UIBackgroundFetchResult.newData);
//處理彈出紅包view
//...
}
5. 證書切換問題
上面提到過,創(chuàng)建應(yīng)用的時候氮趋,只能上傳一個推送證書伍派。因為需要測試江耀,會暫時選擇開發(fā)推送證書剩胁,當開發(fā)完成App上線后,我們需要去切換成發(fā)布推送證書祥国。假如下個版本又要測試推送昵观,這時又要去切換,再發(fā)布還需要切換舌稀,所以每次切換來切換去的啊犬,很是麻煩。
處理方法:在個推官網(wǎng)創(chuàng)建兩個應(yīng)用壁查,第一個應(yīng)用上傳開發(fā)推送證書觉至,第二個應(yīng)用上傳發(fā)布推送證書。配置debug和release睡腿,如果是debug狀態(tài)语御,使用第一個應(yīng)用的AppID+ AppKey+ AppSecret峻贮;如果是release,使用第二個應(yīng)用的AppID+ AppKey+ AppSecret