极光推送的添加别名

2017-11-21  本文已影响0人  雨燕oc
在你的下面这个方法里加上通知部分,直接复制就行了

- (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就是群体设置,也是区分用户用的,比如说性别男女什么的,跟别名一个效果就不单独说了

上一篇 下一篇

猜你喜欢

热点阅读