那些年远程推送给我留下的坑

今天终于有时间,好好整理远程推送的那些坑了。以下就是,我在做推送(极光推送为例)遇到的几个坑,希望大家能安利一下。(这是最近工作一个简单的总结,很想在后期找个一大把空闲的午后,好好反省下自己,都做了什么见不得人的事)

1坑:

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo

fetchCompletionHandler:(void(^)(UIBackgroundFetchResult))completionHandler(7.0后引进的方法,拥有多任务属性)会覆盖- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo (没有多任务特点)

*备注:两个方法不要同时用,两个同时存在,优先调用前者(前后台点击通知,会调用者两方法中一个)


2坑:

因为 RegistrationID 是 JPush SDK 注册完成之后才得到的,所以调用 SDK API 来获取 RegistrationID 的值时需要稍注意,不是总能够立即得到。(这有可能导致你推送出错)

建议:在监听到 kJPFNetworkDidLoginNotification 这个通知后的代码里,来获取 RegistrationID 的值。


3坑:

aps =     {

alert = haunting;

badge = 1;

"content-available" = 1;

sound = default;

};

**注:除了alert可以为空,其他为空或者("content-available" = 0)会导致

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchCompletionHandler:(void(^)(UIBackgroundFetchResult))completionHandler(7.0后引进的方法,拥有多任务属性)该方法不走(楼主亲试)


第四个不算是坑:算是个友情提示:

//接收远程通知(iOS7.0后,允许在后台时刷新数据)

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo

fetchCompletionHandler:(void(^)(UIBackgroundFetchResult))completionHandler {

NSLog(@"=======收到推送%@========",userInfo);

NSDictionary*APNSDic = [NSDictionarydictionary];

APNSDic = userInfo[@"aps"];

if(application

.applicationState==UIApplicationStateActive){

。。。。。。。。。。。

}

elseif(application

.applicationState==UIApplicationStateBackground){

if(userInfo) {

。。。。。。。。。。。。

}

}

//在此方法中一定要调用completionHandler这个回调,告诉系统是否处理成功

//    UIBackgroundFetchResultNewData, //成功接收到数据

//    UIBackgroundFetchResultNoData,  //没有接收到数据

//    UIBackgroundFetchResultFailed   //接受失败

[JPUSHServicehandleRemoteNotification:userInfo];

if(userInfo) {

completionHandler(UIBackgroundFetchResultNewData);

}else{

completionHandler(UIBackgroundFetchResultNoData);

}

}

以上就是那些年我踩过的坑,望各位珍重!

当然只是开个玩笑,楼主希望与各位互相学习,共同进步!

你可能感兴趣的:(那些年远程推送给我留下的坑)