- 背景
昨晚临近发版测试提了个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
网友评论