微信分享 回調(diào) 和微信支付 回調(diào) 沖突解決

不得不說,友盟的客服以及論壇服務很不周到,特別是最近要獲取友盟微信分享是否成功的狀態(tài),在分享回調(diào)里根本拿不到,回調(diào)根本不走。于是查看友盟論壇,提問的人很多,解答的完全沒有,再咨詢在線客服,回復答不到點子上,或者就要你看文檔或demo,然而你的demo也有問題啊。
問題描述:本項目集成了友盟分享,微信支付等,要實現(xiàn)從APP跳轉(zhuǎn)到微信,再從微信返回APP,需要在AppDelegate里實現(xiàn)-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options (iOS9之后的方法);同時,在分享的時候調(diào)用友盟的分享API,其中有completion回調(diào),本來理應在這里檢測到分享是否成功的,但是此completion卻根本不走。咨詢友盟客服,對方只提到要在前面說的AppDelegate代理方法里處理,到底怎么做,看文檔。。。
系統(tǒng)回調(diào)友盟文檔:

[objc] view plain copy

  • (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
    {
    //6.3的新的API調(diào)用,是為了兼容國外平臺(例如:新版facebookSDK,VK等)的調(diào)用[如果用6.2的api調(diào)用會沒有回調(diào)],對國內(nèi)平臺沒有影響
    BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url options:options];
    if (!result) {
    // 其他如支付等SDK的回調(diào)
    }
    return result;
    }

demo里也是一樣,因為他們只想到怎么實現(xiàn)友盟的功能,關(guān)鍵我這里還集成了微信支付,兩者都會走以上代理,所以要做到區(qū)分!
友盟分享調(diào)起的API:

[objc] view plain copy

//調(diào)用分享接口
[[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
if (error) {
UMSocialLogInfo(@"************Share fail with error %@*********",error);
}else{
if ([data isKindOfClass:[UMSocialShareResponse class]]) {
UMSocialShareResponse *resp = data;
//分享結(jié)果消息
UMSocialLogInfo(@"response message is %@",resp.message);
//第三方原始返回的數(shù)據(jù)
UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);

        }else{  
            UMSocialLogInfo(@"response data is %@",data);  
        }  
    }  
}];  

問題關(guān)鍵:同時集成了友盟分享和微信支付,都走同一個代理方法,需要做到區(qū)分,否則分享回調(diào)不走!
解決方法:

[objc] view plain copy

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
// DLog(@"url = %@ \n options = %@",url,options);
if ([url.host isEqualToString:@"safepay"]) {
//跳轉(zhuǎn)支付寶錢包進行支付,處理支付結(jié)果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
return YES;
}else if ([options[UIApplicationOpenURLOptionsSourceApplicationKey] isEqualToString:@"com.tencent.xin"] && [url.absoluteString containsString:@"pay"]) {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}else{
return [[UMSocialManager defaultManager] handleOpenURL:url];
}
}

關(guān)鍵就在于第二個if判斷中的[url.absoluteString containsString:@"pay"],之前沒寫這句,所有不管是微信支付還是微信分享,都會走到第二個return,導致分享的return(第三個)沒有走到。這里出錯就導致分享時的回調(diào)也沒有走。
雖然不管是微信支付還是微信分享,返回APP時都會帶有com.tencent.xin字段,但是url是不同的,區(qū)分就在這里。

轉(zhuǎn)自:
http://blog.csdn.net/txz_gray/article/details/73528097

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 實現(xiàn)支付寶支付的準備工作: 1.向支付寶簽約,成為支付寶的商戶 簽約完成后,支付寶會提供一些必要的數(shù)據(jù)給我們 商戶...
    Anson楊春安閱讀 8,642評論 0 6
  • 在被支付寶、銀聯(lián)坑過之后,發(fā)現(xiàn)其實微信支付的集成并沒有想象中的那么困難,像支付寶那樣簡單地調(diào)用個方法就行,重要的難...
    petry閱讀 747評論 2 2
  • 首先需要理清楚流程: 1、用戶使用APP客戶端,選擇商品下單。 2、商戶客戶端(就是你做的APP)將用戶的商品數(shù)據(jù)...
    _____七年砍柴閱讀 1,558評論 1 7
  • 十來天的旅程終于結(jié)束。想想很是欣慰。輾轉(zhuǎn)幾千地的旅程,一歲五個月的小人只有輕微的一次水土不服,稍微吃了一點藥物睡了...
    燕子一一閱讀 191評論 0 1
  • 好幾年以前,開始聽民謠和旅歌。從大冰,到馬頔,到趙雷,到許巍;從可可西里,到稻城,到成都,到拉薩。一遍遍單曲循環(huán),...
    賣小妞的餅干閱讀 299評論 0 0

友情鏈接更多精彩內(nèi)容