iOS 关于友盟微信分享成功回调不走的问题

不得不说,友盟的客服以及论坛服务很不周到,特别是最近要获取友盟微信分享是否成功的状态,在分享回调里根本拿不到,回调根本不走。于是查看友盟论坛,提问的人很多,解答的完全没有,再咨询在线客服,回复答不到点子上,或者就要你看文档或demo,然而你的demo也有问题啊。

问题描述本项目集成了友盟分享,微信支付等,要实现从APP跳转到微信,再从微信返回APP,需要在AppDelegate里实现-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options (iOS9之后的方法);同时,在分享的时候调用友盟的分享API,其中有completion回调,本来理应在这里检测到分享是否成功的,但是此completion却根本不走。咨询友盟客服,对方只提到要在前面说的AppDelegate代理方法里处理,到底怎么做,看文档。。。

系统回调友盟文档:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
    //6.3的新的API调用,是为了兼容国外平台(例如:新版facebookSDK,VK等)的调用[如果用6.2的api调用会没有回调],对国内平台没有影响
    BOOL result = [[UMSocialManager defaultManager]  handleOpenURL:url options:options];
    if (!result) {
        // 其他如支付等SDK的回调
    }
    return result;
}

demo里也是一样,因为他们只想到怎么实现友盟的功能,关键我这里还集成了微信支付,两者都会走以上代理,所以要做到区分!

友盟分享调起的API:

//调用分享接口
    [[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;
                //分享结果消息
                UMSocialLogInfo(@"response message is %@",resp.message);
                //第三方原始返回的数据
                UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);

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

问题关键:同时集成了友盟分享和微信支付,都走同一个代理方法,需要做到区分,否则分享回调不走!

解决方法:

扫描二维码关注公众号,回复: 556151 查看本文章
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
//    DLog(@"url = %@ \n options = %@",url,options);
    if ([url.host isEqualToString:@"safepay"]) {
        //跳转支付宝钱包进行支付,处理支付结果
        [[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];
    }
}

关键就在于第二个if判断中的 [url.absoluteString containsString:@"pay"],之前没写这句,所有不管是微信支付还是微信分享,都会走到第二个return,导致分享的return(第三个)没有走到。这里出错就导致分享时的回调也没有走。

虽然不管是微信支付还是微信分享,返回APP时都会带有com.tencent.xin字段,但是url是不同的,区分就在这里。

猜你喜欢

转载自blog.csdn.net/txz_gray/article/details/73528097