不得不說,友盟的客服以及論壇服務很不周到,特別是最近要獲取友盟微信分享是否成功的狀態(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