前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >极光偶尔收不到自定义消息解决办法

极光偶尔收不到自定义消息解决办法

作者头像
赵哥窟
发布2019-07-09 17:44:40
1.5K0
发布2019-07-09 17:44:40
举报
文章被收录于专栏:日常技术分享

项目有个需求,在某几个页面,如果接收到消息推送,就刷新页面,但是消息在锁屏的时候也不不能显示在通知栏,这有点长连接的意思。本来想用长连接来实现,但是看到极光有自定义消息

屏幕快照 2019-07-05 09.27.33.png

这正是想要的功能。 接下来的思路

代码语言:javascript
复制
- (void)viewWillAppear:(BOOL)animated{
      // 注册极光Tag
}

- (void)viewWillDisappear:(BOOL)animated{
     // 删除极光Tag
}

因为只在指定的页面需要接受消息。所以页面离开后要删除Tag这样后台就不需要推送消息。

接下来遇到测试偶尔会接受不到消息的问题。调试的时候发现极光会返回一个code = 6021 的错误

屏幕快照 2019-07-05 09.32.27.png

为什么是回会出现这个问题?

原因:viewWillAppear注册Tag,viewWillDisappear删除,但是测试来回在push和pop同一个页面。就频繁注册Tag就会报6021的错误。注册Tag失败当然收不到自定义消息了。

解决办法

解决办法如果注册Tag失败,重试10次每次间隔10秒钟轮询注册Tag

代码语言:javascript
复制
// 极光多个标签
- (void)addTagsWithArray:(NSMutableArray *)tags{
    self.tags = tags;
    __block NSInteger count = 0;
    NSSet * tagsSet = [[NSSet alloc] initWithArray:tags];
    [JPUSHService addTags:tagsSet completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
        NSLog(@"------iResCode:%zd------",iResCode);
        // 注册失败了重试注册
        if(iResCode != 0){
            if (count < 10) {
                count ++;
                if (!self.timer) {
                      self.timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(resetAddTags) userInfo:nil repeats:YES];
                }
            }
        }
        else{
            // 成功了停止计时器
            [self stopTimer];
        }
    } seq:1];
}

- (void)resetAddTags{
    [self addTagsWithArray:self.tags];
}

- (void)stopTimer
{
    if (self.timer) {
        [_timer invalidate];
        _timer = nil;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.07.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么是回会出现这个问题?
    • 解决办法
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档