App应用程序互相跳转

1. 应用场景

1) 使用第三方用户登录,需要用户授权,还需要"返回到调用的程序,同时返回授权的用户名"

2) 应用程序推广,网易彩票,设置-推荐应用-有很多应用程序图标
-如果本机已经安装过,会直接跳转到另外一个应用程序
-软件的广告,推广结果,后续会有一些列的金钱上的结算

  1. 支付宝,第三方支付,淘宝,电话费充值。。。

2. 要打开本机上的其他应用程序,需要设置schemes,自定义的协议头,可以打开其他的应用程序

你也许会遇到一下问题:

1、 canOpenURL 方法不执行?

2、“This app is not allowed to query for scheme xxx”

3、“This app is not allowed to query for scheme xxx”

.官网的解释:(就是在info.plist 文件里添加 LSApplicationQueriesSchemes)

If you call the “canOpenURL” method on a URL that is not in your whitelist, it will return “NO”, even if there is an app installed that has registered to handle this scheme. A “This app is not allowed to query for scheme xxx” syslog entry will appear.

If you call the “openURL” method on a URL that is not in your whitelist, it will fail silently. A “This app is not allowed to query for scheme xxx” syslog entry will appear.

在info.plist文件里,添加

 LSApplicationQueriesSchemes
 
 urlscheme1
 urlscheme2
 urlscheme3
 urlscheme4
 

跳转的代码如下:

- (IBAction)openWangyi:(id)sender
 {
// 跳转到其他应用程序
// schemes: 网易的scheme wangyi
NSURL *url = [NSURL URLWithString:@"wangyi://view?newsid=201410130001"];

// 判断本机是否安装了目标程序
if ([[UIApplication sharedApplication] canOpenURL:url]) {
   // [[UIApplication sharedApplication] openURL:url];// 过时方法,没效果
  [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
    NSLog(@"没有安装,可以再给定下载地址,前往");
  }
}

判断设备是否安装了某个app,在info.plist 文件添加:例如 app的名字:testA

  CFBundleURLTypes
  

    CFBundleURLSchemes
    
        testA
    


IOS 推荐使用,一下方法打开app
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];

3. 新浪微博的授权界面说明:

1> 在新浪微博中,本身不能直接跳转到该界面
2> 用其他应用程序打开时,如果scheme时weibo://oaauth,直接进入此界面
3> 如果直接点击,返回,返回调用放应用程序
4> 如果点击表格行中的用户名,直接返回用户信息给调用应用程序

4. 如果要返回调用的应用程序,需要知道调用我们的应用程序的scheme

/** 只要是由其他应用程序打开的,就会调用此方法 /
/
* URL 就是其他应用程序,打开当前程序使用的URL */
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

openURL 是打开当前应用程序的url
sourceApplication 是当开当前应用程序的源程序的BundleId

提示:一旦重写了新方法,旧方法就不再被执行
但是:很多第三方框架,都建议两个方法全都写

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

5、如何传参数?

1、其实它的传参数,是在 @":// " , 后面的。它的作用是,根据参数做想要的做的逻辑。
2、点击跳转时,首先会调用该方法,所以,最先在该方法里做逻辑判断。
3、你可以根据 下面的方法去获取:

  - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options

注意一下:是旧设备的话,需要使用旧的方法,否则会闪退,不知道是Xcode 8的原因还是,设备的原因,模拟器是不会闪退。 推荐开发时使用新旧方法,这样就可以满足不同的设备了。

你可能感兴趣的:(App应用程序互相跳转)