app跳转到QQ,微信,支付宝等之后是怎么返回来的

相关app之间的跳转可以参考iOS开发--一步步教你彻底学会『iOS应用间相互跳转』,写的挺详细的,这里就不用做赘述了。
场景:我们一般会有分享,支付的功能,当我们分享或者支付完毕之后,是怎么跳转回到我们的app的?
因为我们知道,在iOS9之后,相关的跳转需要添加白名单,不添加白名单是跳转不了的,我们跳转微信,支付宝的时候,都是提前添加了相关需要跳转app的url schemes到我们的白名单了。我们跳过去的时候虽然把我们自己的url scheme带过去了,但是微信支付宝也不可能动态的将我们自己的url scheme添加到他们的白名单中。

先来看一下跳转qq做的工作
1、添加白名单


app跳转到QQ,微信,支付宝等之后是怎么返回来的_第1张图片
将qq的scheme添加到白名单中.png

2、操作代码

   // 将自己的url Schemes通过参数的形式传递过去,
    NSString *urlStr = @"mqq://App-A";
    NSURL *url = [NSURL URLWithString:urlStr];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        // 3. 打开应用程序
        [[UIApplication sharedApplication] openURL:url];
    } else {
        NSLog(@"没有安装");
    }

如果没有添加qq的白名单,是跳转不过去的,会报错

-canOpenURL: failed for URL: "mqq://" - error: "This app is not allowed to query for scheme mqq"

通过实验,其实白名单是对canOpenURL:方法起了限制。
直接写,也是能够跳过去的。

   NSString *urlStr =@"mqq://App-A";
    NSURL *url = [NSURL URLWithString:urlStr];
    [[UIApplication sharedApplication] openURL:url];

所以,我们跳转到qq,微信或者支付宝的时候,带上自己的url schemes,qq微信或者支付宝将我们带过去的参数url scheme保存了起来。等做完了相关的操作,触发返回操作的时候,qq,微信或者支付宝应该是直接调用了

 NSString *urlStr = @"我们的url schemes://";
   NSURL *url = [NSURL URLWithString:urlStr];
[[UIApplication sharedApplication] openURL:url];

说到这里就明白了。

还有一个问题,为啥你跳转到qq,微信,支付宝,他们就能直接调用** [[UIApplication sharedApplication] openURL:url];跳转app,而不是先通过canOpenURL:**方法判断一下?因为你跳都跳过去了,说明短时间你的应用是不会卸载的,直接跳转肯定能跳转回来。即使你在跳转的前一步操作卸载了,你也得通过将qq压入后台,回到桌面,找到自己的应用的时候卸载吧,当你再回到qq的时候你会发现,qq的界面已经不是准备跳回的界面了,不给你返回的机会,这就是设计上避免了这种非正常的操作了。

最后献上相关的Demo
App-A跳转到App-B,跳转的时候,App-A将自己的url Schemes当做参数传递给App-B,App-B获取到App-A的url Schemes之后保存起来,可以直接返回App-A
注意:只有先通过App-A跳转到App-B之后才能通过App-B跳转回App-A。

你可能感兴趣的:(app跳转到QQ,微信,支付宝等之后是怎么返回来的)