iOS集成極光推送遇到的幾個問題

 

一、APNs證書和主證書的區別


剛開始作推送的時候原本覺得APNs證書就是主證書里加了個容許推送而已,事實證實我仍是太天真了。ios


首先是建立Provisioning Profile文件時選擇證書列表時是不能選擇APNs證書的,並且在XCode裏Code Signing也是不能選擇的。
APNs證書實際上是隻表示了有推送功能,主證書仍是必不可少的。因此如今只是又添加了兩個證書,其餘的是不用變的,因此如今就有4個證書了。做爲一個有輕微強迫症的人,建立完APNs證書就順手把主證書刪了,在這裏讓我折騰了很久。web

二、啓動SDK須要傳的參數

+ (void)setupWithOption:(NSDictionary *)launchingOption
                 appKey:(NSString *)appKey
                channel:(NSString *)channel
       apsForProduction:(BOOL)isProduction;

前兩個就沒必要說了。
channel 發佈渠道。我剛開始也不知道要怎麼填,iOS?App Store?Publish channel?其實這只是一個標識而已,不會有什麼具體影響。並且是可選的,因此填nil也是不要緊的。
isProduction 是否生產環境。看起來頗有用的一個參數,但實際發現YES或NO是沒區別的,在框架裏邊應該是另有判斷。但還必須得填,因此在生產和開發環境之間切換時是不必必定要改這個參數的。api

三、標籤與別名 API

以前的教程文檔是沒有這個的,下載的Demo裏也沒有。可是項目裏確定是要有這個的。bash

別名 alias

爲安裝了應用程序的用戶,取個別名來標識。之後給該用戶 Push 消息時,就能夠用此別名來指定。每一個用戶只能指定一個別名。app

標籤 tag

爲安裝了應用程序的用戶,打上標籤。其目的主要是方便開發者根據標籤,來批量下發 Push 消息。可爲每一個用戶打多個標籤。框架

+ (void) setTags:(NSSet *)tags alias:(NSString *)alias fetchCompletionHandle:(void (^)(int iResCode, NSSet *iTags, NSString *iAlias))completionHandler;

call back結果能夠忽略,但最好判斷一下, 返回值爲 0 才設置成功,才能夠向目標推送。我通常是有block就不會用其餘的,但使用block時須要注意循環引用問題。fetch

四、收到通知後的處理

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler

是在iOS7以後的方法,因此以前的方法能夠不用了。ui

- (void)applicationWillEnterForeground:(UIApplication *)application

applicationWillEnterForegroun是在didReceiveRemoteNotification以後運行的,因此在這個方法裏想處數據是不行的。而後[application setApplicationIconBadgeNumber:0];是偶爾會抽風一下的,因此最好這樣寫:spa

[application setApplicationIconBadgeNumber: 1];
[application setApplicationIconBadgeNumber:0];

固然,不要忘了[application cancelAllLocalNotifications];code

還有,關於跳轉到特定頁面的問題。反正我是沒找到如何在AppDelegate裏找到當前的頁面,因此只能用self.window.rootViewController了。返回的話直接self.view.window.rootViewController = vc;吧。
記得用application.applicationState == UIApplicationStateActive判斷一下應用處於的狀態。若是用戶正在運行應用,或許還有更好的,但我就是彈一個UIAlertView。

 



相關文章
相關標籤/搜索