不得不說,友盟的客服以及論壇服務(wù)很不周到唱蒸,特別是最近要獲取友盟微信分享是否成功的狀態(tài)邦鲫,在分享回調(diào)里根本拿不到,回調(diào)根本不走神汹。于是查看友盟論壇庆捺,提問的人很多,解答的完全沒有慎冤,再咨詢?cè)诰€客服疼燥,回復(fù)答不到點(diǎn)子上沧卢,或者就要你看文檔或demo蚁堤,然而你的demo也有問題啊。
問題描述:本項(xiàng)目集成了友盟分享但狭,微信支付等披诗,要實(shí)現(xiàn)從APP跳轉(zhuǎn)到微信,再?gòu)奈⑿欧祷谹PP立磁,需要在AppDelegate里實(shí)現(xiàn)-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options (iOS9之后的方法)呈队;同時(shí),在分享的時(shí)候調(diào)用友盟的分享API唱歧,其中有completion回調(diào)宪摧,本來理應(yīng)在這里檢測(cè)到分享是否成功的粒竖,但是此completion卻根本不走。咨詢友盟客服几于,對(duì)方只提到要在前面說的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)用喉刘,是為了兼容國(guó)外平臺(tái)(例如:新版facebookSDK,VK等)的調(diào)用[如果用6.2的api調(diào)用會(huì)沒有回調(diào)],對(duì)國(guó)內(nèi)平臺(tái)沒有影響
BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url options:options];
if (!result) {
// 其他如支付等SDK的回調(diào)
}
return result;
}
demo里也是一樣瞧柔,因?yàn)樗麄冎幌氲皆趺磳?shí)現(xiàn)友盟的功能,關(guān)鍵我這里還集成了微信支付睦裳,兩者都會(huì)走以上代理造锅,所以要做到區(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)鍵:同時(shí)集成了友盟分享和微信支付廉邑,都走同一個(gè)代理方法备绽,需要做到區(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)支付寶錢包進(jì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)鍵就在于第二個(gè)if判斷中的[url.absoluteString containsString:@"pay"],之前沒寫這句宇驾,所有不管是微信支付還是微信分享倍靡,都會(huì)走到第二個(gè)return,導(dǎo)致分享的return(第三個(gè))沒有走到课舍。這里出錯(cuò)就導(dǎo)致分享時(shí)的回調(diào)也沒有走塌西。
雖然不管是微信支付還是微信分享,返回APP時(shí)都會(huì)帶有com.tencent.xin字段筝尾,但是url是不同的捡需,區(qū)分就在這里。
轉(zhuǎn)自:
http://blog.csdn.net/txz_gray/article/details/73528097