美文网首页
微信分享 回调 和微信支付 回调 冲突解决

微信分享 回调 和微信支付 回调 冲突解决

作者: 贝灬小晖 | 来源:发表于2017-10-09 17:15 被阅读1092次

    不得不说,友盟的客服以及论坛服务很不周到,特别是最近要获取友盟微信分享是否成功的状态,在分享回调里根本拿不到,回调根本不走。于是查看友盟论坛,提问的人很多,解答的完全没有,再咨询在线客服,回复答不到点子上,或者就要你看文档或demo,然而你的demo也有问题啊。
    问题描述:本项目集成了友盟分享,微信支付等,要实现从APP跳转到微信,再从微信返回APP,需要在AppDelegate里实现-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options (iOS9之后的方法);同时,在分享的时候调用友盟的分享API,其中有completion回调,本来理应在这里检测到分享是否成功的,但是此completion却根本不走。咨询友盟客服,对方只提到要在前面说的AppDelegate代理方法里处理,到底怎么做,看文档。。。
    系统回调友盟文档:

    [objc] view plain copy

    • (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:

    [objc] view plain copy

    //调用分享接口
    [[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);  
            }  
        }  
    }];  
    

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

    [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"]) {
    //跳转支付宝钱包进行支付,处理支付结果
    [[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是不同的,区分就在这里。

    转自:
    http://blog.csdn.net/txz_gray/article/details/73528097

    相关文章

      网友评论

          本文标题:微信分享 回调 和微信支付 回调 冲突解决

          本文链接:https://www.haomeiwen.com/subject/ydupyxtx.html