• 应用间跳转


    1、配置URLSchemes

        被跳转至的应用要配置URLSchemes,其他应用根据此应用的URLSchemes跳转至此应用。

        一个APP可以配置多个URLSchemes,这样其他APP无论写哪个URLSchemes,都能跳转至此应用。

    方式1:配置Info信息,其实本质修改的还是Info.plist文件

    方式2:直接修改Info.plist文件

    2、配置白名单

    发起跳转的APP使用openURL直接进行跳转,iOS9开始要先判断用户是否下载了跳转至的APP,使用

    canOpenURL方法进行判断,但使用canOpenURL的前提是要配置要跳转至APP的白名单,否则无论用户是否下载,都返回NO。

    注意:我们一般先使用canOpenURL进行判断,然后再进行跳转;但:可以直接使用openURL进行跳转,白名单不用配置,也不用canOpenURL进行判断。

    执行跳转的APP配置白名单(苹果要求最多配置50个白名单):

    或者使用代码来添加白名单:

    1 <key>LSApplicationQueriesSchemes</key>
    2 <array>
    3       <string>toapp</string>
    4 </array>

    3、被跳转的应用

    AppDelegate实现以下方法:

     1 // 当此APP被其他APP打开时调用
     2 // app:
     3 // url:打开APP的URL,即其他APP打开此APP时使用的URL,里面可能包含一些参数
     4 // options:
     5 // return:是否同意打开APP
     6 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
     7     
     8     NSString *urlString = url.absoluteString;
     9     NSRange xieyitouRange = [urlString rangeOfString:@"://"];
    10     NSRange range = NSMakeRange(0, xieyitouRange.location + xieyitouRange.length);
    11     
    12     // 截取其他APP传过来的参数
    13     NSString *queryString = [urlString substringFromIndex:range.location + range.length];
    14     UITabBarController *tabbarVC = (UITabBarController *)self.window.rootViewController;
    15     
    16     // 根据其他APP传过来的不同参数,执行不同的操作
    17     if([queryString isEqualToString:@"0"]){
    18         tabbarVC.selectedIndex = 0;
    19     }
    20     else{
    21         tabbarVC.selectedIndex = 1;
    22     }
    23     
    24     // 回跳,操作执行完,跳回到打开此APP的APP
    25     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    26         [app openURL:[NSURL URLWithString:@"fromapp://"]];
    27     });
    28     
    29     return YES;
    30 }

    4、执行跳转的应用

    执行跳转的代码:

     1 - (IBAction)openURLRed:(id)sender {
     2     // openURL直接打开其他的APP,《toapp://》是要打开的APP的URLSchemes,后面的0是参数
     3     [self.application openURL:[NSURL URLWithString:@"toapp://0"]];
     4 }
     5 - (IBAction)openURLGreen:(id)sender {
     6     // openURL直接打开其他的APP,《toapp://》是要打开的APP的URLSchemes,后面的0是参数
     7     [self.application openURL:[NSURL URLWithString:@"toapp://1"]];
     8 }
     9 - (IBAction)canOpenURLRed:(id)sender {
    10     // 使用canOpenURL先判断用户是否下载了要打开的APP,《toapp://》是要打开的APP的URLSchemes
    11     // 使用这个方法,需要先设置白名单(iOS9开始),否则调用的时候,不管用户是否下载,都返回NO
    12     if([self.application canOpenURL:[NSURL URLWithString:@"toapp://"]]){
    13         [self.application openURL:[NSURL URLWithString:@"toapp://0"]];
    14     }
    15     else{
    16         NSLog(@"您还未下载此APP");
    17     }
    18 }
    19 - (IBAction)canOpenURLGreen:(id)sender {
    20     // 使用canOpenURL先判断用户是否下载了要打开的APP,《toapp://》是要打开的APP的URLSchemes
    21     // 使用这个方法,需要先设置白名单(iOS9开始),否则调用的时候,不管用户是否下载,都返回NO
    22     if([self.application canOpenURL:[NSURL URLWithString:@"toapp://"]]){
    23         [self.application openURL:[NSURL URLWithString:@"toapp://1"]];
    24     }
    25     else{
    26         NSLog(@"您还未下载此APP");
    27     }
    28 }
  • 相关阅读:
    [翻译] 编写高性能 .NET 代码--第五章 通用编码与对象设计 -- 类 vs 结构体
    [翻译] 编写高性能 .NET 代码--第二章 GC -- 配置选项
    [翻译]编写高性能 .NET 代码 第二章:垃圾回收 基本操作
    [翻译]编写高性能 .NET 代码 第二章:垃圾回收
    [翻译]编写高性能 .NET 代码 第一章:工具介绍 -- Visual Studio
    [翻译]编写高性能 .NET 代码 第一章:工具介绍 -- Performance Counters(性能计数器)
    [翻译]编写高性能 .NET 代码 第一章:性能测试与工具 -- 平均值 vs 百分比
    [翻译]编写高性能 .NET 代码 第一章:性能测试与工具 -- 选择什么来衡量
    NGUI锚定系统:UIAnchorUIRect
    NGUI Panel裁剪、层级实现原理
  • 原文地址:https://www.cnblogs.com/panda1024/p/6081587.html
Copyright © 2020-2023  润新知