iOS的URLScheme
一直都有接触要设置app的url scheme,从最早的facebook開始。
当时的理解是SSO用的,当授权成功之后,facebook app或者safari能够利用给定的url scheme来回调程序。依照Facebook dev页的指南,在Info.plist中增加url scheme。
怎样在info.plist中增加url scheme
直接将info.plist用源代码打开,增加例如以下代码:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.xxxx.xxxx</string>
<key>CFBundleURLSchemes</key>
<array>
<string>yourURLScheme</string>
</array>
</dict>
</array>
当然也能够在xCode中增加URL Type的row,只是遇到过xCode不自己主动提示补全,自己写的话,会无效,所以还是比較信任源代码~
直接在xCode中操作加入URL Types
再后来xCode的project属性Info页签以下有专门的URL Types条目加入URL Types。在Identifier中填入BundleID,URL Schemes中填入相应的Scheme。
Scheme的作用在之前facebook的使用中已经领悟了一部分,可是还有其它强大的功能,比方你想要在iOS设备的safari中输入一个URL(后面你会知道。就是你自定义的URL Schemes)就能直接打开你的设备。就和启动众多系统应用一样!
!没错,你的DIAO丝程序也能像挂着苹果老爹光环的“高帅富”应用一样启动。
系统URL Schemes
Stock
Some of these URL schemes doesn't work anymore in the latest iOS. Let's hope they get reintroduced.itms-apps:// – Open the App Store
maps:// – Open the Maps app
sms:// – Open the compose window of the Messages app
music:// – Go to the currently playing song in the Music app
youtube:// – Open the YouTube app
itms-books:// – Open the iBooks app
facetime://
prefs:root=General&path=Bluetooth
prefs:root=General&path=AUTOLOCKS
prefs:root=NOTIFICATIONS_ID
prefs:root=General&path=USAGE
prefs:root=General&path=Bluetooth
prefs:root=AIRPLANE_MODE
prefs:root=Brightness
prefs:root=Wallpaper
prefs:root=INTERNET_TETHERING
prefs:root=CASTLE
prefs:root=CASTLE&path=STORAGE_AND_BA
prefs:root=General&path=About
prefs:root=General&path=USAGE/CELLULAR_USAGE
prefs:root=MUSIC&path=EQ
prefs:root=General&path=Network
prefs:root=LOCATION_SERVICES
prefs:root=Phone&path=CallerID
prefs:root=Phone&path=CallForwarding
prefs:root=Safari
prefs:root=General&path=Assistant
prefs:root=General&path=Keyboard
prefs:root=Sounds
prefs:root=General&path=Network/VPN
prefs:root=WIFI
想要实现上面的功能,在应用中只增加scheme是不够的,还须要针对该scheme做相应的处理,有点类似广播通讯的原理,输入scheme后发出广播。你须要写接收该广播以及处理的代码。
- 不要实现applicationDidFinishLaunching:方法
- 实现application:didFinishLaunchingWithOptions:方法。并在当中检查url。假设能处理该url则返回YES。否则不做处理返回NO。
- 实现application:handleOpenURL:,处理url。成功返回YES,否则返回NO。
在iOS4中。URL分下面两种方式传入app中
- 假设是启动程序。则application:didFinishLaunchingWithOptions:被运行,返回YES当且仅当application:handleOpenURL:运行返回YES。
- 假设程序由后台挂起变为活动。则application:didFinishLaunchingWithOptions:不会被运行,可是application:handleOpenURL:会被运行。
处理代码例如以下:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
NSLog(@"%@", [url absoluteString]);
if ([[url host] isEqualToString:@"yourURLScheme"]) {
return YES;
}
return NO;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
NSURL *url = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
if ([self application:application handleOpenURL:url]) {
return YES;
}
return NO;
} // End of application:didFinishLaunchingWithOptions:
注意:
在iOS4.2之后,application:handleOpenURL:将被DEPRECATED
能够使用
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
sourceApplication
The bundle ID of the application that is requesting your application to open the URL (url).
sourceApplication即为调用者发送给接收者的Bundle ID,比方MobileSafari就是com.apple.mobilesafari
annotation
A property-list object supplied by the source application to communicate information to the receiving application.
调用者发给接收者的plist对象
假设该程序没有被安装。那么在Safari中打开我们希望能跳转到下载界面。须要实现这个功能,我们能够利用JS的window.location和setTimeout函数。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<body>
<script>
window.location = "URL Scheme:";
setTimeout( function(){ window.location="http://App Store地址"; } , 1500);
</script>
</body>
</html>
将该代码保存为index.html。放于站点上,利用Safari打开该文件。则可以实现假设安装了该应用,则打开。否则可以直接跳转到App Store的App下载页面。
注意
JS中的URL Scheme不要包括非转义字符,比方'-./'等,假设有非转义字符则须要转义后输入到Safari,直接在Safari中输入URL Scheme打开应用,假设提示
Safari打不开该网页,由于这是一个本地文件
那么非常有可能由于你的URL Scheme中包括了非转义字符,最好全为英文字母数字最好。
代码怎样调用
NSURL *url = [NSURL URLWithString:@"URL Scheme://"];
[[UIApplication sharedApplication] openURL:url];
iOS的URLScheme的更多相关文章
- 开源 iOS 项目分类索引大全 - 待整理
开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...
- ios项目里扒出来的json文件
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...
- 微信双开是定时炸弹?关于非越狱iOS上微信分身高危插件ImgNaix的分析
作者:蒸米@阿里移动安全 序言 微信作为手机上的第一大应用,有着上亿的用户.并且很多人都不只拥有一个微信帐号,有的微信账号是用于商业的,有的是用于私人的.可惜的是官方版的微信并不支持多开的功能,并且频 ...
- IOS开发基础知识--碎片32
1:动画属性UIViewAnimationOptions说明 a:常规动画属性设置(可以同时选择多个进行设置) UIViewAnimationOptionLayoutSubviews:动画过程中保证子 ...
- iOS界面跳转的一些优化方案
原文地址: http://blog.startry.com/2016/02/14/Think-Of-UIViewController-Switch/ iOS界面跳转的一些优化方案 App应用程序开发, ...
- (iOS)项目总结-项目中遇到的各种的问题和解决方法
前言: 一到公司报道那时,便着手独立的去完成了一个项目,其中的辛酸泪也是不足为外人道也.这次算是一个新型的app,仍然是独立开发,但心境和想法却是完全的不同.下面说一次以前做开发时常常忽略的知识,也算 ...
- Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)
下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableVie ...
- 史上最全的常用iOS的第三方框架
文章来源:http://blog.csdn.net/sky_2016/article/details/45502921 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片 ...
- 常用iOS的第三方框架
图像:1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等 ...
随机推荐
- 笔记:CS231n+assignment2(作业二)(一)
第二个作业难度很高,但做(抄)完之后收获还是很大的.... 一.Fully-Connected Neural Nets 首先是对之前的神经网络的程序进行重构,目的是可以构建任意大小的全连接的neura ...
- Vue的this.$root.Bus.$on事件被多次触发、多次监听的问题
前端vue项目中,各个组件(非父子关系也可)之间可以通过Bus进行事件通信. main.js中: import Vue from 'vue' const Bus = new Vue(); const ...
- 简析JVM GC的根搜索算法
根搜索算法的基本思路是通过一系列的“GC Roots”的对象作为起始点,从这些节点开始往下搜索,搜索的走过的路径称为引用链,当一个对象到“GC Roots”没有引用链可达时(也就是用图论的话说就是从G ...
- Codeforces 460D. Little Victor and Set
D. Little Victor and Set time limit per test:1 second memory limit per test:256 megabytes input:stan ...
- loj 6278 6279 数列分块入门 2 3
参考:「分块」数列分块入门1 – 9 by hzwer 2 Description 给出一个长为\(n\)的数列,以及\(n\)个操作,操作涉及区间加法,询问区间内小于某个值\(x\)的元素个数. 思 ...
- 快速排序Quick sort(转)
原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序 ...
- Spring Boot学习——Spring Boot简介
最近工作中需要使用到Spring Boot,但是以前工作中没有用到过Spring Boot,所以需要学习下Spring Boot.本系列笔记是笔者学习Spring Boot的笔记,有错误和不足之处,请 ...
- LeetCode OJ--Anagrams **
https://oj.leetcode.com/problems/anagrams/ 在一个vector<string>中,找到所有经过顺序变换,可以变成一样的 string. 首先,对每 ...
- Codeforces Gym101502 E.The Architect Omar-find()函数
E. The Architect Omar time limit per test 1.0 s memory limit per test 256 MB input standard input ...
- Codeforces Round #464 (Div. 2) A. Love Triangle[判断是否存在三角恋]
A. Love Triangle time limit per test 1 second memory limit per test 256 megabytes input standard inp ...