美文网首页
国内4G网-ShareSDK分享墙外App回调问题

国内4G网-ShareSDK分享墙外App回调问题

作者: pengweijun | 来源:发表于2018-05-12 16:44 被阅读0次
    • 背景
      昨晚临近发版测试提了个Bug说国内4G网络(无翻墙无代理)的时候点击分享到Twitter/YouTube没反应

    • 第一反应

    这百分之一万是 ShareSDK 没给我回调导致控制开关变量isSharing没有发生变化,所以被判断为仍在分享ing所以后续点击无效(也就是每次点击分享根据isSharing为YES则点了没反应,当然如果喜欢弹个toast也是可以的)

    临时解决方案

    - (void)setIsSharing:(BOOL)isSharing{
          if (!isSharing) {
              self.delayMarker = -1;
          }
        _isSharing = isSharing;
    }
    - (void)processDelaySetting{
        if (self.delayMarker == -1) {
            self.delayMarker = 1;
            uintptr_t maxToleratedTime = 10;
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(maxToleratedTime * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                if (self.isSharing) {
                    self.isSharing = NO;
                    self.delayMarker = -1;
                }
            });
        }
    }
    
    - (void)shareSDKAction{
        if (self.isSharing){
            return;
        }
    
        [self processDelaySetting]; 
    
        [ShareSDK share:blablablabla block:^(BOOL success, id callBackInfo, NSError * error){ //大概就是类似这样的方法
            self.isSharing = NO;
        }];
    }
    
    • 优化方案
    - (void)setIsSharing:(BOOL)isSharing{
        if (!isSharing) {
            if (self.timer) {
                dispatch_cancel(self.timer);
                self.timer = nil;
            }
        }
        _isSharing = isSharing;
    }
     
    - (void)processDelaySetting{
        @weakify(self);
        uintptr_t maxToleratedTime = 10;
        self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0, 0));
        dispatch_source_set_timer(self.timer, DISPATCH_TIME_NOW, (int64_t)(maxToleratedTime * NSEC_PER_SEC), 0);
        dispatch_source_set_event_handler(self.timer, ^{
            @strongify(self);
            if (self.isSharing) {
                self.isSharing = NO;
            }
        });
        dispatch_resume(self.timer); //开始计时ss
    }
    - (void)shareSDKAction{
        if (self.isSharing){
            return;
        }
    
        [self processDelaySetting]; 
    
        [ShareSDK share:blablablabla block:^(BOOL success, id callBackInfo, NSError * error){ //大概就是类似这样的方法
            self.isSharing = NO;
        }];
    }
    
    • 实际真心想要的方案
      心里还是不甘心,想着这没道理啊为毛不给我回调,不太科学。
      度娘了下 ,在 SDK官网 技术客服一号叫 xxxx大圣 (应该是个西游记小迷弟吧),直击痛点问大圣为嘛不给我回调,大圣说应该callbackUrl和开放平台配置的链接不一致导致的于是我跑去 推特官网 登录进去核对了项目中授权认证的redirectUri,嗯,是一毛一样的。一号大圣说帮我找个iOS开发看看(因为大圣是Android画风的)
      很快二号就出场了,描述完我的诉求,二号吐槽
      WechatIMG49.png
      于是这个问题就姑且看起来告一段落了,跟老大那边反馈了下进展,备注了下JIRA

    相关文章

      网友评论

          本文标题:国内4G网-ShareSDK分享墙外App回调问题

          本文链接:https://www.haomeiwen.com/subject/hgxhdftx.html