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的工程属性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后发出广播,你需要写接收该广播以及处理的代码。

  1. 不要实现applicationDidFinishLaunching:方法
  2. 实现application:didFinishLaunchingWithOptions:方法,并在其中检查url,如果能处理该url则返回YES,否则不做处理返回NO。
  3. 实现application:handleOpenURL:,处理url,成功返回YES,否则返回NO。

在iOS4中,URL分以下两种方式传入app中

  1. 如果是启动程序,则application:didFinishLaunchingWithOptions:被执行,返回YES当且仅当application:handleOpenURL:执行返回YES。
  2. 如果程序由后台挂起变为活动,则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

时间: 2024-10-13 06:26:38

iOS的URLScheme的相关文章

自己总结的 iOS ,Mac 开源项目以及库,知识点------持续更新

自己在 git  上看到一个非常好的总结的东西,但是呢, fork  了几次,就是 fork  不到我的 git 上,干脆复制进去,但是,也是认真去每一个每一个去认真看了,并且也是补充了一些,感觉非常棒,所以好东西要分享,为啥用 CN 博客,有个好处,可以随时修改,可以持续更新,不用每次都要再发表,感觉这样棒棒的 我们 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报开源框架 图像: 1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.      下载:https://github.com/mwaterfall/MWPhotoBrowser目前比较活跃的社区仍旧是Github,

iOS开发基础知识--碎片32

 iOS开发基础知识--碎片32 1:动画属性UIViewAnimationOptions说明 a:常规动画属性设置(可以同时选择多个进行设置) UIViewAnimationOptionLayoutSubviews:动画过程中保证子视图跟随运动. UIViewAnimationOptionAllowUserInteraction:动画过程中允许用户交互. UIViewAnimationOptionBeginFromCurrentState:所有视图从当前状态开始运行. UIViewAnimat

IOS平台APP安全Checklist

#1. 前言IOS平台APP安全风险相关的一般性Checklist,保障IOS客户端安全评估的质量与效率.#2. 数据安全##2.1 传输安全该类漏洞的审查场景:APP通过网络发送或接收敏感信息,比如用户口令.用户隐私信息等,或者通过网络下发的数据执行某些敏感操作**漏洞类型说明:**由于移动设备通常是通过wifi上网,因而面临网络窃听.网络劫持等中间人攻击行为,因此对于敏感信息需要加密传输,并且对接收到的重要数据也需要进行完整性校验.如果APP自身实现了加密及完整性校验的机制,需要确认机制是否

iOS开发 非常全的三方库、插件、大牛博客等等

UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件. SVPullToRefresh- 下拉刷新控件. MJRefresh- 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看"使用方法". (国人写) XHRefreshControl- XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更多的组件.(国人写) CBStoreHo

IOS开发之—— IOS 支付 [支付宝、银联、微信]

支付宝iOSsdk官方下载sdk地址:https://b.alipay.com/order/productDetail.htm?productId=2013080604609654&tabId=4#ps-tabinfo-hash 快捷支付(无线)是一种程序式的支付方式,在手机.掌上电脑等无线设备的应用程序内,买家可通过支付宝进行付款购买特定服务或商品,资金即时到账. 第一步: 1 公司账户:企业支付宝账号就申请 注册企业账号,如果是个人账户,就申请个体工商户. 接入前准备阶段 商户签约审核签约审

iOS、mac开源项目及库汇总

UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看“使用方法”. (国人写) XHRefreshControl – XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更多的组件.(国人写) CBStoreHou

常用iOS的第三方框架

图像:1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.      下载:https://github.com/mwaterfall/MWPhotoBrowser 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下Github里面流

很好的iOS学习资料

https://github.com/vsouza/awesome-ios 汇集了很多好的资料 https://github.com/vsouza/awesome-ios Skip to content This repository Pull requests Issues Gist You don’t have any verified emails. We recommend verifying at least one email. Email verification helps ou