• 简介
  • 配置和实现
  • 判断应用启动方式

一、简介

最实际项目开发中,我们难免会遇到需要从一个应用跳转到另一个应用的情况。比如微信分享,实际就是一种应用间的跳转。但是有时候我们需要实现自己的两个应用间的跳转,以便可以推广我们其他的应用。这个时候我们需要使用UIApplication的openURL:的方法


二、配置

1⃣️注册自定义的URL

首先被启动的应用需要向iPhone注册一个自定义URL协议。这是在你的项目文件夹的info.plist文件进行的

1. 右键,选择“Add Row”, Key值选择“URL types”
2. 打开“Item 0″,然后为该key增加一个URL identifier。可以是任何值,但建议用“反域名”(例如 “com.open.url”)。
3. 在“Item 0”下再加一行。
4. 选择“URL Schemes” 作为Key。
5. 输入你的URL协议名 (例如“openurl1://” 应写做“openurl”)。如果有必要,你可以在这里加入多个协议。

图解:

2⃣️代码部分(在另外的程序中)

  1. - (void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4.  
  5. UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  6. btn.frame = CGRectMake(100, 100, 120, 50);
  7. [btn setTitle:@"测试123" forState:UIControlStateNormal];
  8. [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  9. btn.titleLabel.font = [UIFont systemFontOfSize:14.0];
  10. [btn setBackgroundColor:[UIColor redColor]];;
  11. [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
  12.  
  13. [self.view addSubview:btn];
  14. }
  15.  
  16. - (void)btnClick
  17. {
  18. NSURL * myURL_APP_A = [NSURL URLWithString:@"openurl1://"];
  19. if ([[UIApplication sharedApplication] canOpenURL:myURL_APP_A]) {
  20. NSLog(@"canOpenURL");
  21. [[UIApplication sharedApplication] openURL:myURL_APP_A];
  22. }
  23. }

三、判断应用的启动方式

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

通过AppDelegate里面的回调方法,可以确定应用的启动方式。launchOptions包含了我们需要的参数

  1. 说明:当应用程序启动时执行,应用程序启动入口。只在应用程序启动时执行一次。application参数用来获取应用程序的状态、变量等,值得注意的是字典参数:(NSDictionary *)launchOptions,该参数存储程序启动的原因。
  1. 1.若用户直接启动,lauchOptions内无数据;
    2.若由其他应用程序通过openURL:启动,则UIApplicationLaunchOptionsURLKey对应的对象为启动URLNSURL),UIApplicationLaunchOptionsSourceApplicationKey对应启动的源应用程序的bundle ID (NSString);
    3.若由本地通知启动,则UIApplicationLaunchOptionsLocalNotificationKey对应的是为启动应用程序的的本地通知对象(UILocalNotification);
    4.若由远程通知启动,则UIApplicationLaunchOptionsRemoteNotificationKey对应的是启动应用程序的的远程通知信息userInfoNSDictionary);
  1. 其他key还有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,
    UIApplicationLaunchOptionsNewsstandDownloadsKey 如果要在启动时,做出一些区分,那就需要在下面的代码做处理。 比如:应用可以被某个其它应用调起(作为该应用的子应用),要实现单点登录,那就需要在启动代码的地方做出合理的验证,并跳过登录
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  2. {
  3. NSLog(@"%@", launchOptions);
  4. NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
  5. if(url){}
  6. NSString *bundleId = [launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey];
  7. if(bundleId){}
  8. UILocalNotification * localNotify = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
  9. if(localNotify){}
  10. NSDictionary * userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
  11. if(userInfo){}
  12.  
  13. return YES;
  14. }

最后补充一点,在开发中iOS 9 以上会出现canOpenURL: failed for URL: "ABC://app/*******/" - error: "This app is not allowed to query for scheme ABC"的错误,

由于IOS加入对用户隐私以及禁止扫描系统信息的控制,目前通过canOpenURL的方法来判断用户是否安装特定app,则会出现-canOpenURL: failed for URL: "ABC://app/*******/" - error: "This app is not allowed to query for scheme ABC"的错误,

同时也返回NO,直接通过openUrl也是没有反应。具体原因可以参考文章:Quick Take on iOS 9 URL Scheme Changes

修改起来很简单,只需要在plist中加入ABC的白名单即可,如:

<key>LSApplicationQueriesSchemes</key>

<array>

<string>ABC</string>

</array>

iOS应用程序开发之应用间的跳转(用着微信等第三方分享登陆)的更多相关文章

  1. iOS应用程序开发之应用间的跳转

    简介 配置和实现 判断应用启动方式 一.简介 最实际项目开发中,我们难免会遇到需要从一个应用跳转到另一个应用的情况.比如微信分享,实际就是一种应用间的跳转.但是有时候我们需要实现自己的两个应用间的跳转 ...

  2. 从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.前面几篇随笔主要介绍C#和O ...

  3. iOS越狱程序开发

    iOS越狱程序开发http://www.docin.com/p-760246852.html

  4. 利用XCode来进行IOS的程序开发

    利用XCode来进行IOS的程序开发 本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换 ...

  5. 2021 年 iOS 应用程序开发七种最佳语言

    移动应用程序现在几乎是每个在线业务的必备品.最新的 StatCounter 数据显示,多达56% 的在线连接是通过移动设备建立的,这使它们高于平板电脑和计算机.更重要的是,同一个消息来源说,其中27% ...

  6. Android开发利用shareSDK等第三方分享,弹出的是英文名称。例如Genymotion模拟器

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 Android开发利用shareSDK等第三方分享,弹出的是英文名称.例如Genymotion模拟器就 ...

  7. IOS应用程序开发流程

    应用程序开发流程 1.IOS开发需要思考的问题 用户是谁?不同应用程序的内容和用户体验大不相同,这取决于想要编写的是什么应用程序,它可能是儿童游戏,也可能是待办事项列表应用程序,又或者是测试自己学习成 ...

  8. 微信程序开发系列教程(二)使用JavaScript给微信用户发送消息

    我之前的文章 微信程序开发系列教程(一)开发环境搭建 介绍了微信开发环境的搭建,这篇文章我们就来一步步开发一些具体的功能. 功能需求:当有微信用户关注了您的公众号之后,您用JavaScript发送一个 ...

  9. Android 和 iOS 应用程序开发对比 [持续更新]

    1.Android 用字典模式统一管理应用程序中UI上用到的所有字符串. 比如文本框的默认文本.按钮的名字等等.表现形式:XML文件 Android中 "@string/text_filed ...

随机推荐

  1. Membership三步曲

    http://www.cnblogs.com/jesse2013/p/membership-part1.html http://www.cnblogs.com/jesse2013/p/membersh ...

  2. [IR] Information Extraction

    阶段性总结 Boolean retrieval 单词搜索 [Qword1 and Qword2]               O(x+y) [Qword1 and Qword2]- 改进: Gallo ...

  3. 流行趋势:25款很酷的长阴影效果 LOGO 设计

    长阴影其实就是扩展了对象的投影,感觉是一种光线照射下的影子,通常采用角度为 45 度的投影,给对象添加了一份立体感.长阴影(Long Shadow)概念来自于最新非常流行的扁平化设计(Flat Des ...

  4. Java泛型数组

    文章来自http://blog.csdn.net/orzlzro/article/details/7017435 Java 不支持泛型数组.也就是说, List<String>[] ls ...

  5. NPTL 线程同步方式

    NPTL提供了互斥体 pthread_mutex_t 类型进行线程同步,防止由于多线程并发对全局变量造成的不正确操作.使用 pthread_mutext_t 对数据进行保护已经可以实现基本的数据同步, ...

  6. Gradle学习系列之七——依赖管理

    在本系列的上篇文章中,我们讲到了如何使用java Plugin,在本篇文章中,我们将讲到Gradle的依赖管理. 请通过以下方式下载本系列文章的Github示例代码: git clone https: ...

  7. Web前端面试题集锦

    前端开发面试知识点大纲: 注意 转载须保留原文链接(http://www.cnblogs.com/wzhiq896/p/5927180.html )作者:wangwen896 HTML&CSS ...

  8. TortoiseSVN的bin目录下面没有svn.exe

    自己在idea联合svn时遇到这个问题,然后bd和gg,发现很多人都乱说,说什么TortoiseSVN是客户端,默认不包含svn.exe,需要安装Subversion.bullshit! 之所以没有, ...

  9. C#创建自定义配置节

    在.Net应用程序中,我们经常看到VS为我们生成的项目工程中都会含有nfig或者nfig这样的文件.这个文件就是我们所说的应用程序配置文件.在这个文件里面记述着一些与我们的应用程序相关的信息,如:数据 ...

  10. 整理的有用的一些EF的CommonDAL小封装

    CommonDAL封装: using System; using System.Collections.Generic; using System.Data.Entity; using System. ...