在使用極光推送的過程中,服務(wù)器端有時候會遇到設(shè)備綁定不了registrationID的狀況。
經(jīng)過排查發(fā)現(xiàn),向服務(wù)器接口傳registrationID的時候,一定幾率極光推送的服務(wù)還沒初始化完成,導(dǎo)致registrationID沒有值。
然后發(fā)現(xiàn)極光的API里面有這個:
@class UILocalNotification;
extern NSString \*const kJPFNetworkDidSetupNotification; // 建立連接
extern NSString \*const kJPFNetworkDidCloseNotification; // 關(guān)閉連接
extern NSString \*const kJPFNetworkDidRegisterNotification; // 注冊成功
extern NSString \*const kJPFNetworkDidLoginNotification; // 登錄成功
extern NSString \*const
kJPFNetworkDidReceiveMessageNotification; // 收到消息(非APNS)
extern NSString \*const kJPFServiceErrorNotification; // 錯誤提示
一開始我從UILocalNotification這個命名,以為是以本地通知的形式傳過來的,但是在
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
里沒接收到通知。
然后翻閱極光的文檔,在個角落發(fā)現(xiàn)了- -這個通知要自己注冊的。。醉了。。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
xxxxxx
//注冊
NSNotificationCenter \*defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidLoginNotification object:nil];
}
//通知方法
- (void)networkDidLoginMessage:(NSNotification *)notification {
//調(diào)用接口
DLog(@"\n\n極光推送注冊成功\n\n");
//通知后臺registrationID
xxxxx
//注銷通知
[[NSNotificationCenter defaultCenter] removeObserver:self name:kJPFNetworkDidLoginNotification object:nil];
}
醬紫就能防止registrationID還沒生成,就調(diào)服務(wù)器接口的情況了
這個通知每次啟動的時候都會走,所以最后還是要加個常量,來判斷一下,只跟服務(wù)器進行一次綁定registrationID的通訊。
簡書已經(jīng)棄用,歡迎移步我的小專欄:
https://xiaozhuanlan.com/dahuihuiiOS