IOS开发之App之间的拉起和跳转
我们平时在浏览HTML5页面的时候,经常会遇到跳转到微信、淘宝、京东等App页面,如下图所示:
那么IOS是如何实现App之间的跳转呢?今天就来学习一下。
URL Scheme:
IOS在系统层面为我们提供了URL Scheme来实现App之间的通信,比如App启动,跳转和参数传递。
其拉起的格式如下:
比如我们想拉起微信,可以在浏览器页面输入:weixin://
就可以跳转到微信app页面。当然我们也可以在weixin:// 后面追加内容,让其跳转到子页面。
接下来我就演示一下如何在Safari浏览器中拉起我自己创建的一个App。
要让App支持被拉起,首先我们需要在URL Types中设置该App的URL Scheme。
如图,我设置自己的App的URL Scheme为Sample。
接下来我在模拟器中进行试验:输入Sample://
模拟器就会跳出是否拉起App的窗口,选择Open,就可以实现跳转了。
这里需要强调一下,如果我们将自己App的URL Scheme设置为weixin,并在Safari浏览器中输入weixin://,浏览器依旧会打开我们的App,这就为一些不法分子提供了机会,利用打开微信等人们App的链接,而实际上跳转到的页面很可能是非法的链接。
以上展示了使用Safari唤起我的App,那么如何使用我自己的App唤起别的App呢?接下来就演示一下。
两个App之间的唤起:
如图,模拟器中,使用左边的App拉起右边的App。
首先我需要设置我要拉起的App的URL Scheme,此处设置为TestScheme
接着我在我自己的App里书写拉起的逻辑代码。
这里需要用到两个函数,一个是canOpenUrl,一个是openURL,原型如下:
- (void)openURL:(NSURL*)url options:(NSDictionary<UIApplicationOpenExternalURLOptionsKey, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion API_AVAILABLE(ios(10.0)) NS_EXTENSION_UNAVAILABLE_IOS("");
这里代码中我们在viewClick函数中实现拉起App的逻辑。
-(void) viewClick{NSLog(@"viewClick");//点击手势执行打开TestScheme AppNSURL *urlScheme = [NSURL URLWithString:@"test://"]; //注意这里的URL要写成你在对应的拉起的App中设置的URL Scheme__unused BOOL canOpenURL = [[UIApplication sharedApplication] canOpenURL:urlScheme];[[UIApplication sharedApplication] openURL:urlScheme options:@{} completionHandler:^(BOOL success) {//}];
}
此时我们运行我们的App,并且执行点击逻辑,但是并不能拉起我们的App,并且canOpenURL返回的也是false。
这是因为在IOS9之后,IOS提供了白名单,只有在白名单里的App才能被拉起,因此,我们还需要把我们要拉起的App加入白名单。
接下来我们把要拉起的App加入白名单:
加入白名单后,我们再次点击黄色方框:
设置断点观察:
可以看到canOpenURL返回YES,并且成功拉起TestScheme App。
IOS开发之App之间的拉起和跳转相关推荐
- iOS开发之 app版本升级流程
原文链接:http://www.cnblogs.com/LGLblog/p/5548823.html 版本号的格式:v<主版本号>.<副版本号>.<发布号> 版本号 ...
- (0003) iOS 开发之App 适配iOS 10
iOS 10 给开发者带来的变化 顺便加一句:我是第一时间更新Xcode 8正式版的,一切正常,注释快捷键也没有网上说的问题.运行速度更快了,不容易崩溃了! App 做了哪些兼容: 1.UI 兼容, ...
- iOS开发之APP内部切换语言
2019独角兽企业重金招聘Python工程师标准>>> 前言 iOS开发中,随着APP越来越完善,很多APP都做了国际化,也实现了APP内部切换语言. 原理 国际化都会走到NSBun ...
- iOS开发之iOS15.6之后拉流LFLiveKit,画面模糊及16.1马赛克问题
更新了iOS15.6系统后,发现拉取LFLiveKit进行直播的流,竟然是这样的: 模糊不清,于是思考是什么原因导致的. 1.是不是拉流端出现的问题? 使用安卓拉取iOS的直播流,是同样的效果,又考虑 ...
- ios开发之app内启动用户评价
原文链接 http://blog.csdn.net/yangxt/article/details/8196914 恰当的指引用户去给app评分是获得用户反馈的一种不错的途径. "通过cu ...
- iOS开发之AVKit框架使用
2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...
- (0016)iOS 开发之Mac上Navicat Premium 创建远程连接和本地连接
1.下载安装 (百度云盘里面有安装文件和注册机) 链接: https://pan.baidu.com/s/1kVG1k71 密码: mr5g 破解教程看这篇博客:http://blog.csdn.ne ...
- 李洪强iOS开发之RunLoop的原理和核心机制
李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...
- iOS开发之Xcode常用调试技巧总结
转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...
最新文章
- 基本概念_复杂网络基本概念
- Mysql将日期转为字符串
- 不用任何比较判断找出两个数中较大的数
- 切换账户、切换命令行和图形界面
- Python实现-中介者模式
- 【算法】一个简单的K近邻(KNN)原理
- 阿里云服务器 ,MySQL建库、建表
- Mysql学习笔记(三)运算符和控制流函数
- ssl1072-砝码称重【dp练习】
- 论述计算机硬件结构的理解论文,论述对汇编语言教学内容和方法及特点的认识与思考...
- svg如何平铺 html5,如何在HTML5中使用SVG
- [cocos2dx笔记015]关于cocos2dx Button三种状态说明
- Oracle 单实例 迁移到 RAC 实例 -- 使用导出导入方法
- 【设计鉴赏】精选字体设计鉴赏(三)
- 四级英语图表作文真题计算机,英语四级作文真题
- 常见嵌入式Web服务器比较
- 智能车K60学习笔记
- seo全攻略_SEO优化操作流程是怎样的?有哪些步骤?
- 世界上最远的距离-泰戈尔
- AspectJ的使用方法