iOS 应用程序的跳转

作者: liuyanhongwl | 来源:发表于2017-08-22 16:52 被阅读55次

一. 应用程序间通信

例如,要在Safari应用程序中打开Google主页,我们可以编写如下代码:

NSURL *url = [NSURL URLWithString:@"http://google.com"]; 
[[UIApplication sharedApplication] openURL:url];

这里的http://部分叫做URL方案(URL scheme),它表示想要载入的应用程序。

还有几种用于本地iPhone应用程序的URL方案,并且可以使用类似的方式来启动它们。About Apple URL Schemes

二. A应用打开B应用。

原理: A应用根据URL Schemes来启动B应用。

  • B应用 注册一个自定义的URL Schemes
  • A应用 通过B注册的URL Schemes启动B
1. B应用 注册URL Schemes

在B应用的info.plist文件下加入 URL Types

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.wlnana17.B</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myapp</string>
        </array>
    </dict>
</array>

CFBundleURLName: 是URL Identifier,是自定义的URL Scheme的名字,建议采用反转域名的方法保证该名字的唯一性,比如come.yourCompany.yourApp。

CFBundleURLSchemes: 是一个数组,可以定义多个URL Schemes。这里不需要再后面追加://,如果设置为myapp, 那么自定义的url就是myapp://。

2. A应用 使用B注册的URL Schemes启动B
 BOOL canOpen = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"myapp://"]];
            BOOL isOpen = NO;
            if (canOpen) {
                isOpen = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"myapp://openedapp.wlnana17.com?property1=10"]];
            }
3. iOS9 URL Schemes

在iOS9以后,如果使用 canOpenURL: 方法,该方法所涉及到的 URL scheme 必须在"Info.plist"中将它们列为白名单,否则不能使用。key叫做LSApplicationQueriesSchemes ,键值内容是

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>urlscheme</string>
 <string>urlscheme2</string>
 <string>urlscheme3</string>
 <string>urlscheme4</string>
</array> 

所以在iOS9以后,我们需要在A应用的info.plist里加入如下,才能打开B应用

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>myapp</string>
</array> 

苹果为什么要这么做?

在 iOS9 之前,你可以使用 canOpenURL: 监测用户手机里到底装没装微信,装没装微博。但是也有一些别有用心的 App ,这些 App 有一张常用 App 的 URL scheme,然后他们会多次调用canOpenURL: 遍历该表,来监测用户手机都装了什么 App ,比如这个用户装了叫“大姨妈”的App,你就可以知道这个用户是女性,你就可以只推给这个用户女性用品的广告。这是侵犯用户隐私的行为。

4. 打开B应用

被打开的B应用会调用application:openURL:options:方法

  • 如果B应用不在后台:会走application:willFinishLaunchingWithOptions:application:didFinishLaunchingWithOptions:方法,如果这两个方法有一个返回NO,将不会走application:openURL:options:方法。

  • 如果B应用在后台,不会走application:willFinishLaunchingWithOptions:application:didFinishLaunchingWithOptions:方法,所以会调用application:openURL:options:

三. 问题

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options NS_AVAILABLE_IOS(9_0); // no equiv. notification. return NO if the application can't open for some reason

为什么返回NO无效果?有知道的小伙伴指点一下。

四. 应用程序之间共享数据

这里的共享数据指的是APP跳转时,通过URL传递数据。

五. 其他

也可以在Safari中,键入使用定制模式的URL(myapp://),确认是否启动B应用,就可以从Safari中打开注册的B应用

详情请看 App Programming Guide for iOS

相关文章

  • 本地通知

    iOS7 iOS8要获取用户允许 接收到通知时带参数应用程序跳转

  • 应用间跳转

    iOS 9.0之后 应用程序跳转 需要设置白名单info.plist 增加 LSApplicationQueri...

  • iOS 应用程序的跳转

    一. 应用程序间通信 例如,要在Safari应用程序中打开Google主页,我们可以编写如下代码: 这里的http...

  • 看别人博客留存的重要知识:iOS应用程序间相互跳转

    应用间相互跳转简介 在iOS开发的过程中,我们经常会遇到需要从一个应用程序A跳转到另一个应用程序B的场景。这就需要...

  • 一分钟学会app跳转

    在iOS开发的过程中,我们经常会遇到需要从一个应用程序A跳转到另一个应用程序B的场景。这就需要我们掌握iOS应用程...

  • iOS集成ReactNative跳转、传值

    iOS跳转RN界面iOS跳转RN界面传值iOS跳转不同的RN界面(一)iOS跳转不同的RN界面(二)RN界面跳转到...

  • 应用间跳转

    本文简单介绍iOS应用程序互相跳转的方法 2.要打开本机上的其他应用程序,需要设置schemes,自定义的协议头,...

  • iOS - 应用程序跳转schemes

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

  • iOS 应用程序之间跳转

    iOS应用程序最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于...

  • IOS 应用程序互相跳转

    1. 应用场景 使用第三方用户登录,需要用户授权,还需要"返回到调用的程序,同时返回授权的用户名" 应用程序推广,...

网友评论

    本文标题:iOS 应用程序的跳转

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