iOS App 唤醒另一个App
网上也有讲这块的,感觉讲得都不是很好。而且有一些细节根本没有讲清楚。这里重写整理一下相关知识点。
主要内容
- URL Scheme 是什么?
- 项目中关键的配置
- 注意事项
URL Scheme 是什么?
iOS
有个特性就是应用将其自身”绑定”到一个自定义 URL scheme
上,该 scheme
用于从浏览器或其他应用中启动本应用。常见的分享到第三方之间的跳转都是基于Scheme
的。
通过对比网页链接来理解iOS
上的 URL Schemes
,应该就容易多了。
URL
,我们都很清楚,http://www.apple.com
就是个URL
,我们也叫它链接或网址;Schemes
,表示的是一个UR
L 中的一个位置——最初始的位置,即://
之前的那段字符。比如http://www.apple.com
这个网址的Schemes
是 http。
根据我们上面对URL Schemes
的使用,我们可以很轻易地理解,在以本地应用为主的 iOS 上,我们可以像定位一个网页一样,用一种特殊的 URL
来定位一个应用甚至应用里某个具体的功能。而定位这个应用的,就应该这个应用的URL 的 Schemes
部分,也就是开头儿那部分。比如短信,就是 sms:
你可以完全按照理解一个网页的 URL ——也就是它的网址——的方式来理解一个 iOS 应用的 URL,拿苹果的网站和 iOS 上的微信来做个简单对比:
网页(苹果) | iOS 应用(微信) | |
---|---|---|
网站首页/打开应用 | http://www.apple.com | weixin:// |
子页面/具体功能 | http://www.apple.com/mac/(Mac页面) | weixin://dl/moments(朋友圈) |
关于基础概念性的就讲这么多
项目中关键的配置
在项目Info
的Url Type
中配置(被唤起端)
Url Type
,表示可以被哪些带前缀Url打开,而不是可以打开以这些前缀开头的app。
- 说明
- URL identifier只是一个标示符,随意填写,建议写成:
com.*.*
反转域名的方法保证该名字的唯一性。 - URL Scheme就是你用来通信的命令前缀,用来定位一个应用。
- URL identifier只是一个标示符,随意填写,建议写成:
在Plist
文件中配置
- 注意:
URL Schemes
是一个数组,允许应用定义多个URL schemes
。接收到唤起如何处理
在代理方法- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
中判断唤起的来源
sourceApplication:(NSString *)sourceApplication annotation:(id)annotationsource app
,根据Url
所携带的参数进行不同的操作。比如跳转到制定的页面,相关的逻辑处理等等.
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSLog(@"Calling Application Bundle ID: %@", sourceApplication);
NSLog(@"URL scheme:%@", [url scheme]);
NSLog(@"URL query: %@", [url query]);
// Customer Code
return YES;
}
以上配置是在被唤起应用中配置的。
唤起端
一般情况下,唤起端可以直接调用appDelegate
的代理方法去唤醒其他应用。
- (void)awakeOtherApp
{
NSString *customURL = @"otherApp://";
if ([[UIApplication sharedApplication]
canOpenURL:[NSURL URLWithString:customURL]])
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error"
message:[NSString stringWithFormat:
@"No custom URL defined for %@", customURL]
delegate:self cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
}
}
- 这里需要注意一下在
iOS9
以后,唤起端需要配置一下
LSApplicationQueriesSchemes
.iOS9
之后需要,iOS9
之后提高了app
的安全性,需要给出一个类似白名单的东西,在白名单里面的才能打开app
。不然报错: -canOpenURL: failed for URL: "OpenAppTest://mark?id=007" - error: "This app is not allowed to query for scheme OpenAppTest"
注意事项
通过上面的方法可以唤醒其他的应用,简单总结下一些注意事项。
- URL Scheme 其实就是一个app应用的唯一标志。通过它来确定打开那个应用。
- 一定要分清哪些配置在哪方配置,被唤醒与唤醒。
- iOS9之后需要在唤起端加入
LSApplicationQueriesSchemes
千万不能忘。 - 还有一个问题还没解决,如何再次回到唤醒应用的界面。这个需要参考下官方的
XCallbackURL
。听说有些复杂,有空再看看。
原文链接:http://www.jianshu.com/p/7a308f5b89fc
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
iOS App 唤醒另一个App的更多相关文章
- 怎样退出App之前唤醒还有一个App?
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 SDK并没 ...
- Android 一个app启动另一个app
最近,一个app启动另一个app,这个玩法挺火的嘛,有没有试过更新QQ到5.1版本,QQ的健康里面就可以添加其他app,实现从QQ跳转到其他app应用.这个挺好玩的,一下子带来了多少流量啊. 一.先来 ...
- android一个app打开另一个app的指定页面
一个app打开另一个app的指定页面方法 有以下几种 1.通过包名.类名 2.通过intent的 action 3.通过Url 方案1. ComponentName componentName = n ...
- 如何用一个app操作另外一个app.比如微信群控那样的
如何实现一个app.控制另外的app,比如市面上群控微信的,是用测试工具的原理?还是什么模拟点击的原理? 如何用一个app操作另外一个app.比如微信群控那样的 >> android这个答 ...
- ios 一个app启动另一个app
问题描述:需要从一个ios应用程序中,能启动另一个ios应用程序. 开发环境:xcode7.3.1 关键词:白名单(LSApplicationQueriesSchemes).注册自己的URL Demo ...
- 一个App与另一个App之间的交互,添加了自己的一些理解
URL Scheme 是什么? iOS有个特性就是应用将其自身"绑定"到一个自定义 URL scheme 上,该 scheme用于从浏览器或其他应用中启动本应用.常见的分享到第三方 ...
- APP开发:一个APP开发需要哪些技术人员?
亿合科技小编了解到:国民老公王思聪曾经在一个访谈中谈到过,如果他是一个普通人,他会选择移动互联网去创业,因为做个网站或者App开发门槛较低,做大做强的机会也比较多.小编觉得创业就是投资,重 ...
- 亲手使用Sencha Touch + phonepag开发Web APP随笔 -- 第一个APP
参考博文: [Phonegap+Sencha Touch] 移动开发1.准备工作 [Phonegap+Sencha Touch] 移动开发2.PhoneGap/Cordova初步使用 经过差不多1 ...
- Windows Phone 8 通过一个app启动另一个app
Winphone8 通过app启动第三方app需要被启动的app支持,具体操作步骤如下: 假设要通过PhoneApp2启动PhoneApp1 PhoneApp1端做的操作如下: 1.注册Protoco ...
随机推荐
- R统计图
主题:R统计图 作者:luomg 关键字:统计,R,ggplot2 1.什么是统计图? 统计图:统计图是从数据到几何对象的图形属性的一个映射 砖石重量对价格的散点图 qplot(carat,price ...
- 33.allegro中Autosilk top, Silkscreen top 和Assembly top三个什么区别(转)
Autosilk top, Silkscreen top 和Assembly top Autosilk top:最后出gerber的时候,自动生成的丝印层.会自动调整丝印位置,以及碰到阻焊开窗的地方, ...
- 骇客(Hacker)用语
什么是TCP/IP 是一种网络通信协议,他规范了网络上所有的通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式.,TCP/IP是INTERNET的基础 ...
- VC++编程中获取系统时间
<span style="white-space:pre"> </span>总结了在程序中如何获得系统时间的方法 void CGetSystenTimeDl ...
- solr简易安装配置
之前弄了段时间的lucene,昨天下午开始学solr,准备用到项目中,在网上找了一些教程,有的不是讲得太复杂,就是讲得不在点上,花了不少冤枉时间.有的一上来就花过半的篇幅大讲特讲“3H”,(what, ...
- GCC常用命令行一览表
GCC常用命令行一览表 这些常用的 gcc/g++ 命令行参数,你都知道么?1. gcc -E source_file.c-E,只执行到预编译.直接输出预编译结果. 2. gcc -S source_ ...
- Binary Indexed Tree 分类: ACM TYPE 2014-08-29 13:08 99人阅读 评论(0) 收藏
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int n, ...
- 聊一聊js中的null、undefined与NaN
零.寒暄 翻翻自己的博客,上一篇竟然是六月26号的,说好的更新呢?回顾刚刚过去的这个七月,整天都是公司的入职培训加上自己的小论文,每天奋战到凌晨1点多,这是要挂的节奏啊!但是不论怎么说,自己的时间管理 ...
- 图片放大镜插件 Cloud Zoom v3.1
Cloud Zoom是一个图像放大jQuery插件,效果堪比Magic Zoom.相对于流行jQZoom插件,Cloud Zoom体积小,有更多的功能和更强大的跨浏览器兼容性. 猛击这里查看演示DEM ...
- HDU1056 HangOver
HangOver Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descript ...