JPush的坑

​ 搞了一下午, 没有搞出来, 最终在一个同事的提醒下终于弄好了, 废话不多说直接上代码

/**
 初始化极光推送
 */
- (void)setJPush:(NSDictionary *)launchOptions {

    //初始化APNs
    JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
    entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound;
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
        // 可以添加自定义categories
        // NSSet<UNNotificationCategory *> *categories for iOS10 or later
        // NSSet<UIUserNotificationCategory *> *categories for iOS8 and iOS9
    }
    [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];


    //初始换JPush
    [JPUSHService setupWithOption:launchOptions appKey:JPushAppKey channel:nil apsForProduction:NO];

    //设置别名
    [JPUSHService setTags:nil alias:@"abc" fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
        NSLog(@"%@", iAlias);
    }];

//    [[NSNotificationCenter defaultCenter] addObserver:self
//                                             selector:@selector(networkDidLogin:)
//                                                 name:kJPFNetworkDidLoginNotification
//                                               object:nil];
//    关掉无法无天的log, 需要时再开启
    [JPUSHService setLogOFF];

}

上面就是我的代码, 完全按照极光官方文档集成, 但是就是绑定不了别名。

下面我来说一下原因, 在JPush刚刚初始化后面直接调用设置标签很有可能极光那边还没有登录完成, 因为都是异步网络请求, 所以此时去绑定标签或者别名肯定是不行的, 解决方案就是 在初始化的地方设置登录极光成功的通知, 极光sdk中有一下几个通知, 并且还给了中文注释, 不愧为中国人写的哈,

extern NSString *const kJPFNetworkIsConnectingNotification; // 正在连接中
extern NSString *const kJPFNetworkDidSetupNotification;     // 建立连接
extern NSString *const kJPFNetworkDidCloseNotification;     // 关闭连接
extern NSString *const kJPFNetworkDidRegisterNotification;  // 注册成功
extern NSString *const kJPFNetworkFailedRegisterNotification; //注册失败
extern NSString *const kJPFNetworkDidLoginNotification;     // 登录成功
extern NSString *const kJPFNetworkDidReceiveMessageNotification;         // 收到消息(非APNS)
extern NSString *const kJPFServiceErrorNotification;  // 错误提示

所以, 正确的姿势应该这么写:

/**
 初始化极光推送
 */
- (void)setJPush:(NSDictionary *)launchOptions {


    //初始化APNs
    JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
    entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound;
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
        // 可以添加自定义categories
        // NSSet<UNNotificationCategory *> *categories for iOS10 or later
        // NSSet<UIUserNotificationCategory *> *categories for iOS8 and iOS9
    }
    [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];


    //初始换JPush
    [JPUSHService setupWithOption:launchOptions appKey:JPushAppKey channel:nil apsForProduction:NO];
    //添加监听通知
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(networkDidLogin:)
                                                 name:kJPFNetworkDidLoginNotification
                                               object:nil];
    [JPUSHService setLogOFF];


}
- (void)networkDidLogin:(NSNotification *)notification {
    [JPUSHService setTags:nil alias:@"abc" fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {
        NSLog(@"%@", iAlias);
    }];
    //移除通知
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:kJPFNetworkDidLoginNotification
                                                  object:nil];

}

经过上面的改造成功设置别名和标签, 希望做到这的小伙伴们别再才坑, 哦, 对了, 通知一定要记得移除哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值