在你的下面这个方法里加上通知部分,直接复制就行了
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#pragma mark - 通知
// NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
//Required
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
//可以添加自定义categories
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
UIUserNotificationTypeSound |
UIUserNotificationTypeAlert)
categories:nil];
} else {
//categories 必须为nil
[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)
categories:nil];
}
//Required
// 如需继续使用pushConfig.plist文件声明appKey等配置内容,请依旧使用[JPUSHService setupWithOption:launchOptions]方式初始化。
// 下面这个是老方法,需要加plist,现在不用了,用下面的方法,这个设置一遍就行了
// 把这个appKey换成你自己的appKey就行了,其他直接复制
// [JPUSHService setupWithOption:launchOptions];
[JPUSHService setupWithOption:launchOptions
appKey:@"a59c6b6037300edb93384d55"
channel:@"Publish channel"
apsForProduction:NO];
return YES;
}
#pragma mark - 通知
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
/// Required - 注册 DeviceToken
[JPUSHService registerDeviceToken:deviceToken];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
// Required,For systems with less than or equal to iOS6
[JPUSHService handleRemoteNotification:userInfo];
}
// 后台更新的方法,实现这个方法必须开启后台模式,一般情况下不用,注释了就行了
//- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
//
// // IOS 7 Support Required
// [JPUSHService handleRemoteNotification:userInfo];
// completionHandler(UIBackgroundFetchResultNewData);
//}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
//Optional
NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
}
但是,如果你想区分用户单推,比如QQ消息这种,你就得设置唯一标示,也就是别名
这个时候需要注意两点:
1, 在登录成功的时候设置别名(一般就是userID什么的唯一标示)
2.在推出登录的时候把别名取消,否则及时推出也能收到推送,就不安全了
// 登录成功
#pragma mark - 推送别名设置
[JPUSHService setTags:nil alias:userID fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
XHLog(@"%d-------------%@,-------------%@",iResCode,iTags,iAlias);
}];
// 退出登录
#pragma mark - 推送,用户退出,别名去掉
[JPUSHService setAlias:@"" callbackSelector:nil object:self];
好了,说俩坑
第一,描述证书一定要导清楚,不然出现乱七八糟的问题
1.会报错APNs is not available,please check your provisioning profile and certificatio
2.你会发现你设置的开发环境跟测试环境完全没有卵用,而且乱七八糟的表现...我这边5测试机在开发环境无限收到推送信息,完全停不下来,6sp的完全收不到,但是在生产环境下完全没有问题,推得好好地...
3.你实现的单推完全没有作用
第二,别名设置不上,控制台打印信息app not registed, give up set tag:
感觉是由于推送服务还没接通就去设置了,所以设置的别名被放弃了。
这个看好像有很多状态吗设置,不过没具体去弄,百度了下用的延迟操作,代码如下
#pragma mark - 推送别名设置
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[JPUSHService setTags:nil alias:userID fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
XHLog(@"%d-------------%@,-------------%@",iResCode,iTags,iAlias);
}];
});
注意一条,我建议用这个回调的方法直接打印状态码来调试,这样很方便的能找到问题,恕我直言...我没搞明白那个回调的方法里面怎么传参数...
设置tag就是群体设置,也是区分用户用的,比如说性别男女什么的,跟别名一个效果就不单独说了
网友评论