社区公告:
    爆款云产品,限时折扣 腾讯云学生服务器10元优惠套餐 新用户千方百计送大礼,2660+元云上大礼包免费领取中! 领取宝塔管理面板3188红包! 腾讯云新客户无门槛领取2860元代金券
    发新帖

    JPush的陷阱

      [复制链接]
    1222 13

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x

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

    /** 初始化极光推送 */- (void)setJPushNSDictionary *)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//                                             selectorselector(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)setJPushNSDictionary *)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                                             selectorselector(networkDidLogin                                                 name:kJPFNetworkDidLoginNotification                                               object:nil];    [JPUSHService setLogOFF];}- (void)networkDidLoginNSNotification *)notification {    [JPUSHService setTags:nil alias"abc" fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias) {        NSLog(@"%@", iAlias);    }];    //移除通知    [[NSNotificationCenter defaultCenter] removeObserver:self                                                    name:kJPFNetworkDidLoginNotification                                                  object:nil];}

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


    举报 使用道具

    回复

    精彩评论13

    bigfish   发表于 2019-9-16 20:30:40 | 显示全部楼层
    看了此帖,我只想说一句吾爱程序猿很好很强大!

    举报 使用道具

    回复 支持 反对
    jesy   发表于 2019-9-16 21:13:08 | 显示全部楼层
    视频教程是不加密的,不管你信不信,反正我验证过了。

    举报 使用道具

    回复 支持 反对
    javanovice   发表于 2019-9-16 21:37:16 | 显示全部楼层
    看帖看完了至少要顶一下,楼主整理资源辛苦啦!

    举报 使用道具

    回复 支持 反对
    bennyyuan1990   发表于 2019-9-17 08:54:55 | 显示全部楼层
    啥也不说了,吾爱程序猿社区的网友就是给力!

    举报 使用道具

    回复 支持 反对
    yhb1357066926   发表于 2019-9-17 09:09:30 | 显示全部楼层

    视频教程是不加密的,不管你信不信,反正我验证过了。

    举报 使用道具

    回复 支持 反对
    amoi3000   发表于 2019-9-17 09:22:12 | 显示全部楼层
    这个帖子不回对不起自己!我想我是一天也不能离开吾爱程序猿论坛。

    举报 使用道具

    回复 支持 反对
    richard   发表于 2019-9-18 09:15:29 | 显示全部楼层

    看了此帖,我只想说一句吾爱程序猿很好很强大

    举报 使用道具

    回复 支持 反对
    SwingV5   发表于 2019-9-22 12:18:53 | 显示全部楼层

    视频教程是不加密的,不管你信不信,反正我验证过了。

    举报 使用道具

    回复 支持 反对
     楼主| _472708969   发表于 2019-9-23 09:43:28 | 显示全部楼层
    看帖看完了至少要顶一下,楼主整理资源辛苦啦!

    举报 使用道具

    回复 支持 反对
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    【新用户限量秒杀】热门云产品限量秒杀,云服务器1核1G 首年99元

    快速回复 返回顶部 返回列表