zoukankan      html  css  js  c++  java
  • iOS跳转到另一个程序

    我这里只是写了部分东西,如果想看更加详细的,请点击原文链接.

     
    原则上iOS的沙箱原理,是阻止一个app去访问其他app的资源乃至是系统底层的资源的但是我们可以通过一种变相的方式:通过对应的URL模式和其他程序进行通讯.
    iOS应用之间的调用步骤:
     
    一, 调用自己开发的应用
     1)在plist文件中,注册对外接口
     在xcode group&files 里面,展开 resources选择info.plist
    鼠标右击information property list ,然后从列表中选择URL types
    右击 add row 添加一个对象(item)右击item add row
    从列表中选择 URL  Schemes 再右击添加一个对象(item1)
    将item1得值设置为:myapp
    这个myapp就是对外接口,其它应用可以通过它,调用该应用
    plist如下图所示:
    2).处理URL请求
    应用程序委托在 application:handleOpenURL:方法中处理传递给应用程序的URL请求。如果您已经为自己      的应用程序注册了定制的URL模式,则务必在委托中实现这个方法。
    下面代码实现了这个委托方法;
     - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
    {
    if([[url scheme] isEqualToString:@"myapp"]){
    [application setApplicationIconBadgeNumber:10];
    return YES;
    }
    return NO;
    }
    3).测试外部调用
    1.回到Home屏幕,启动Safari(在iPhone仿真器上,在菜单上选择Hardware->Home命令就可以回到Home屏幕)。
    2.在Safari的地址栏中,键入使用定制模式的URL: myapp:
    3.确认您的应用程序是否启动,以及应用程序委托是否收到application:handleOpenURL:消息
    4)调用方法
      在你需要调用上面注册过对外接口的应用中,添加下面代码即可
      NSURL *url = [NSURL URLWithString:@"myapp:"];
      [[UIApplication sharedApplication] openURL:url];
     通过上述两个步骤,你可以在你的应用中,让用户打开你的其它应用
     

    二, 调用IOS自带的应用

    上面讲述的是调用自身的应用,讲解了如何在自己应用之间调用问题,今天介绍一下如果调用IOS自带的app的方法

    一、调用app store界面方法

    在实际开发中,往往要推荐自己其他应用和推荐自己的收费软件,那么我们就需要在程序中直接连接到app store的相应页面。

    实际上的做法很简单,使用的还是UIApplication类的OpenURL方法: 

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"程序的相应连接"]];

    二、调用其它应用的方法

    1)调用 自带mail


    [[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"mailto://admin@hzlzh.com"]];

    2)调用 电话phone


    [[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"tel://8008808888"]];


    3)调用 SMS

    
[[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"sms://800888"]];


    4)调用自带 浏览器 safari

    
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"http://www.hzlzh.com"]];

    5)调用 Remote

    
[[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"remote://fff"]];

    上面是最基本的语句,没什么处理过程。

    如:调用phone可以传递号码,调用SMS只能设定号码,不能初始化SMS内容。

     

    IOS 应用程序间跳转

    最近开发的程序需要集成到公司的sso统一身份认证平台中,需要从认证平台的app跳转到我们开发的这个app。

    下面时程序中需要配置的地方

    在目标程序的plist文件里面修改:

    打开xxxx-info.plist,添加一项URL types

    打开URL types,将item0的URL identifier修改为URL Schems

    展开URL Schemes,将item0的内容修改为xxxApp(此为跳转的key)

    如下图所示:

    在程序里面需要跳转的地方,添加代码

    NSURL *myUrl = [NSURL URLWithString:@"xxxApp://abcde"]; //xxxApp为目标App跳转的key

      if([[UIApplication sharedApplication] canOpenURL:myUrl]){

          [[UIAppliactioin sharedApplication] openURL:myUrl];

      }

    这样就可以实现跳转了。

    2,配置URL Scheme

    a,展开URL types,再展开Item1,将Item1下的URL identifier修改为URL Scheme

    b,展开URL Scheme,将Item1的内容修改为myapp

    (其他应用可通过”myapp://“来访问此自定义URL的应用程序)

     

    3,其他应用的跳转

    作为调用者的我,需要通过:

    1
    2
    3
    NSString *paramStr = [NSString stringWithFormat:@"myAppTest://username=%@&age=%@&address=%@", @"test123", @"100", @"上海市"];
        NSURL *url = [NSURL URLWithString:[paramStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        [[UIApplication sharedApplication] openURL:url];

    这段代码来跳转目标应用并传递参数。

     

    4,参数的接收

    那么作为一个Provider怎么去接收Customer传递过来的参数呢?

    首先,在找到项目中的AppDelegate.m文件,然后找到openURL方法(如果没有就去实现它)。OK,到这里你已经完成了90%了,接着继续

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
        NSString *urlStr = [url absoluteString];
        if ([urlStr hasPrefix:@"myAppTest://"]) {
            NSLog(@"TestAppDemo1 request params: %@", urlStr);
            urlStr = [urlStr stringByReplacingOccurrencesOfString:@"myAppTest://" withString:@""];
            NSArray *paramArray = [urlStr componentsSeparatedByString:@"&"];
            NSLog(@"paramArray: %@", paramArray);
            NSMutableDictionary *paramsDic = [[NSMutableDictionary alloc] initWithCapacity:0];
            for (int i = 0; i < paramArray.count; i++) {
                NSString *str = paramArray[i];
                NSArray *keyArray = [str componentsSeparatedByString:@"="];
                NSString *key = keyArray[0];
                NSString *value = keyArray[1];
                [paramsDic setObject:value forKey:key];
                NSLog(@"key:%@ ==== value:%@", key, value);
            }
     
        }
        return NO;
    }
  • 相关阅读:
    H264关于RTP协议的实现
    RTSP交互命令简介及过程参数描述
    RTSP协议详解
    TCP 协议中MSS的理解
    RTSP 协议分析
    Linux下/etc/resolv.conf 配置DNS客户
    371. Sum of Two Integers
    python StringIO
    高效的两段式循环缓冲区──BipBuffer
    JavaScript Lib Interface (JavaScript系统定义的接口一览表)
  • 原文地址:https://www.cnblogs.com/apem/p/4650256.html
Copyright © 2011-2022 走看看