iOS设置里电池按钮的url scheme是多少,我想ios 自定义返回按钮一个快捷方式直接到达电

Xcode6.4注册URL Scheme步骤详解--百度百家
Xcode6.4注册URL Scheme步骤详解
分享到微信朋友圈
我们都知道苹果手机中的APP都有一个沙盒,APP就是一个信息孤岛,相互是不可以进行通信的。但是iOS的APP可以注册自己的URLScheme,URLScheme是为方便app之间互相调用而设计的。我们可以通过系统的OpenURL来打开该app,并可以传递一些参数。
好消息:微信团队邀请我的iOS开发(id:iOSDevTip )微信公众号开通赞赏功能,以后我就可以光明正大的通过文章要饭啦。你的赞赏就是我最大的动力。
这是今天下午15:30收到的邀请:
微信赞赏功能
为什么推出赞赏功能?微信公众号自2012年推出以来,一直成爆发式的增长。微信推出赞赏功能最重要的目的就是为了鼓励原创,鼓励创新。
之前,原创功能、赞赏功能和评论功能是一起邀请开通的。现在微信团队分三次邀请。现在我的iOS开发公众号,已经被邀请开通了原创和赞赏功能,下一步争取开通评论功能。
如果开通评论功能,我就可以更方便的和大家交流。一经邀请,我会第一时间告诉大家的。好消息,大家也知道啦。接下来继续回到正题,我们来谈谈iOS中的URLScheme。
URLScheme的作用
我们都知道苹果手机中的APP都有一个沙盒,APP就是一个信息孤岛,相互是不可以进行通信的。但是iOS的APP可以注册自己的URLScheme,URLScheme是为方便app之间互相调用而设计的。我们可以通过系统的OpenURL来打开该app,并可以传递一些参数。
例如:你在Safari里输入,就可以直接打开你的支付宝app,前提是你的手机装了[支付宝](/blog//zhi-fu-bao-he-wei-xin-zai-chao-xi-shang-shui-geng-sheng-%5B%3F%5D-chou/)。如果你没有装支付宝,应该显示的是支付宝下载界面,点击会跳到AppStore的支付宝下载界面。
URLScheme必须能唯一标识一个APP,如果你设置的URLScheme与别的APP的URLScheme冲突时,你的APP不一定会被启动起来。因为当你的APP在安装的时候,系统里面已经注册了你的URLScheme。
一般情况下,是会调用先安装的app。但是iOS的系统app的URLScheme肯定是最高的。所以我们定义URLScheme的时候,尽量避开系统app已经定义过的URLScheme。
注册URLScheme
1.在info.plist里添加URLtypes
每一个项目里面都会有一个info.plist配置文件。找到info.plist,右键选择AddRow,然后选择URLtypes。如图所示:
2.添加URLSchemes
添加完URLtypes,点击展开。右键选择AddRow,添加URLSchemes:
3.设置URLSchemes
设置URLSchemes为iOSDevTip
4.设置URLIdentifier
URLIdentifier是自定义的URLscheme的名字,一般采用反转域名的方法保证该名字的唯一性,比如com.iOSStrongDemo.www
添加成功启动提示
为了方便测试,我们在AppDelegate里面添加一个UIAlertView,当app被成功打开时,会提出提示:
-(BOOL)application:(UIApplication*)applicationhandleOpenURL:(NSURL*)url
//接受传过来的参数
NSString*text=[[urlhost]stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
UIAlertView*alertView=[[UIAlertViewalloc]initWithTitle:@"打开啦"
message:text
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertViewshow];
returnYES;
Safari启动自定义的URLSchemesAPP
既然已经配置好URLSchemes,那么我们可以来款速测试一下,我们设置的URLSchemes是否有效。打开Safari,在地址栏里输入:iOSDevTip://
果然成功打开:
也可以在地址栏中输入:iOSDevTip://com.iOSStrongDemo.www。也是可以打开注册了URLSchemes的APP的。
通过另一个APP启动注册了URLSchemes的APP
NSString*url=@"iOSDevTip://";
//&&NSString*url=@"iOSDevTip://com.iOSStrongDemo.www";
if([[UIApplicationsharedApplication]
canOpenURL:[NSURLURLWithString:url]])
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:url]];
NSLog(@"cannotopenURLschemeiOSDevTip");
打开注册iOSDevTip的APP格式为:URLScheme://URLidentifier,直接调用URLScheme也可打开程序,URLidentifier是可选的。
注册URLScheme就是这么简单。下一篇会分享如何通过URLScheme传递参数。demo下载地址:
作者李刚是刚刚在线(&&)站长,百度百家专栏作者
iOS工程师非著名自媒体,微信公众号iOS开发:iOSDevTip运营者
阅读:4255
分享到微信朋友圈
在手机阅读、分享本文
还可以输入250个字
推荐文章RECOMMEND
阅读:9016
阅读:5250
阅读:40万
热门文章HOT NEWS
日,由中国投资协会投资咨询专业委员会电商金...
杨国英观察
百度新闻客户端
百度新闻客户端
百度新闻客户端
扫描二维码下载
订阅 "百家" 频道
观看更多百家精彩新闻今天看啥 热点:
IOS的URL Scheme机制
本篇文章主要从什么是URL Scheme、有什么作用、怎么使用三个方面来讲一下。
第一:什么是URL Scheme
与Android的URL Scheme类似,是为方便app之间互相调用而设计的。你可以通过一个类似URL的链接,通过系统的OpenURl来打开该app,并可以传递一些参数。每个URL必须能唯一标识一个APP,如果你设置的URL与别的APP的URL冲突,此时,你的APP不一定会被调用起来,原因是当APP在安装的时候就已经在系统里面注册了此APP的URL Scheme,如果你的一致但是是后安装的,那么系统不会调用你的APP,因为你的APP设置的URL scheme被覆盖了。
当然系统的APP的URL Scheme是优先级高的,不用想着能覆盖系统APP的URL Scheme的注册调用。
第二:URL Scheme有什么作用:
大家知道在IOS系统里面APP之间是相互隔离的,不像Android,每个组件都可以作为一个独立的功能被其他APP调用,但是,IOS系统里面也需要完成类似于三方功能如支付、搜索跳转、导航等等跨APP的功能,怎么实现呢,苹果就使用了URL Scheme来实现了这个功能。通过各个APP设计的符合苹果的统一规范的URL Scheme,系统就会自动去调用相关的APP来完成你的请求。
比如:我们的APP需要使用支付宝的三方支付功能、我的APP需要使用微信分享好的文章,那么此时就可以通过URL Scheme来传递这些数据到支付宝APP或者微信APP,系统会通过这些APP的URL Scheme来调起这些APP,完成你所需要做的跨APP的功能。
第三:怎么使用呢?
这里分为三步:
首先:配置你的APP
要为 iOS 程序添加自定义协议的支持是一件很方便的事,只需要在程序的 Info.plist 添加一个 URL types 节点就可以了。在这个节点里,可以设置这个程序所支持的自定义协议名称,像 http、ftp 这种,一般我们可以设置为程序英文名称,像淘宝客户端中就设置了 taobao,这样 taobao:// 这个形式的 URL 就会关联到淘宝客户端的 App。
其次 处理使用你的URL Scheme来调起你的APP的请求
如果你的APP为TestB,如果处理成功的Scheme如包含了TestBAPP://callsuccess,那么说明你调用其他的APP成功了。如果不是,那么说明是别的APP如TestAAPP调用了你的APP,此时在你的APPDelegate里面添加如下函数以及实现处理,这里是直接返回告诉TestAAPP调用成功的标识TestAAPP://callsuccess:
-(BOOL)application:(UIApplication*)applicationhandleOpenURL:(NSURL*)url
//Dosomethingwiththeurlhere
NSString*handleUrl=[urlabsoluteString];
if([handleUrlisEqualToString:@&TestBApp://callsuccess&]){
returnYES;
NSString*urlstr=@&TestAAPP:/com.baidu.sidepath.TestA&_callback=TestAApp://callsuccess&;
NSURL*handlbackeUrl=[NSURLURLWithString:urlstr];
[[UIApplicationsharedApplication]openURL:handlbackeUrl];
如果你不想直接返回callback,而是想启动一个页面那么,此时要考虑你的应用是否已经启动,可以如下判断使用:
-(BOOL)application:(UIApplication*)applicationopenURL:(NSURL*)url
sourceApplication:(NSString*)sourceApplicationannotation:(id)annotation{
NSString*handleUrl=[urlabsoluteString];
if([handleUrlisEqualToString:@&TestBApp://callsuccess&]){
returnYES;
UINavigationController*vc=(UINavigationController*)_window.rootViewC
if(vc==nil){
PathViewController*controller=[[PathViewControlleralloc]initWithNibName:@&PathViewController&bundle:nil];
self.window=[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]];
self.mUINavigationController=[[UINavigationControlleralloc]init];
[self.mUINavigationControllerpushViewController:controlleranimated:YES];
[self.windowaddSubview:self.mUINavigationController.view];
//Overridepointforcustomizationafterapplicationlaunch.
self.window.backgroundColor=[UIColorwhiteColor];
[self.windowmakeKeyAndVisible];
returnYES;
也就是把appdelegate里面的didFinishLaunchingWithOptions初始化app的代码拷贝进去。此时会启动PathViewController这个页面。然后在这个页面里面可以添加一个返回按钮来返回到调用APP。
再次 在TestAAPp里面使用URl Scheme调起你的APP
NSString*urlstr=@&TestBAPP:/com.baidu.sidepath.TestB&_callback=TestAApp://callsuccess&;NSURL*url=[NSURLURLWithString:urlstr];[[UIApplicationsharedApplication]openURL:url];
第四注意事项
引用苹果官方的代码注释:
application:handleOpenURL:
AsksthedelegatetoopenaresourceidentifiedbyURL.(Deprecated.Usetheapplication:openURL:sourceApplication:annotation:methodinstead.)
相关搜索:
相关阅读:
相关频道:
IOS教程最近更新IOS_SDK使用说明
QQ登录IOS SDK 封装了QQ登录的登录授权以及大部分OpenAPI,应用只需要修改相应参数,不需要理解验证授权流程,即可快速实现QQ登录功能。
IOS平台上(ipad,iphone,ipod)的应用,请在appid,appkey后,使用QQ互联提供的IOS SDK。
IOS SDK支持web view与浏览器两种方式,即支持跳转到手机浏览器上进行QQ登录与验证流程,开发者可在SDK包中选择浏览器模式即可,但浏览器方式用户跳跃较大,不建议使用。
本SDK仅适用于移动应用,即基于接入的应用。
请到页面下载QQ登录IOS SDK。
创建一个工程,并将SDK中的如下三个文件夹(TencentOAuth,JSON,Res。包括文件夹下的子文件夹)添加到工程中。
下图是demo工程下引用的SDK源文件:
请在需要使用QQ登录的时候在代码中引入头文件:
#import "TencentOAuth.h"。
1. 实现_tencentOAuth成员变量的协议。
实现代码详见下图:
(在SDK包中的位置:\TencentOAuthDemo\Classes\TencentOAuthDemoAppDelegate.h )
2. 在需要使用的类里加上_tencentOAuth成员变量,初始化该变量:
(1) 创建并初始化其appid,此demo为222222:
_tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"222222",
andDelegate:self];
(2) 初始化其redirectURI(无回调地址的手机应用使用默认固定回调地址,不需要更改此项):
_tencentOAuth.redirectURI = @"";
(3) 初始化其需要用户授权的OpenAPI列表:
_permissions =
[[NSArray arrayWithObjects:@"get_user_info", @"add_share", nil] retain];
3. 如果准备使用通过safari跳转的形式,需要在.plist文件里增加一个URL Scheme, 格式为tencent%appid%,此demo为tencent222222。
然后在此AppDelegate中加上下面的方法:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
return [_tencentOAuth handleOpenURL:url];
4.登录时,请调用下面方法:
[_tencentOAuth authorize:_permissions inSafari:NO];
参数inSafari来控制是否需要在safari中进行登录。默认值为“NO”。
YES:表示需要,此时会切换到Safari中登录,登录后根据上述第3步中增加的URL Scheme,返回到你的app中;
NO:表示不需要,直接在当前app里弹出一个内嵌网页,并进行登录。
5. 调用下面的接口来响应登录成功或失败的情况(在SDK包中的位置:\TencentOAuthDemo\TencentOAuth\TencentOAuth.h) :
登录成功:
@protocol TencentSessionDelegate &NSObject&
- (void)tencentDidL
登录失败:
@protocol TencentSessionDelegate &NSObject&
-(void)tencentDidNotLogin:(BOOL)
6. 登录成功后,即可获取到access token和openid。
特别提示:
获取到的access token具有3个月有效期,需实现防过期策略,并在过期后提示用户再次授权。
第三方网站可存储access token信息,以便后续调用OpenAPI访问和修改用户信息时使用。
成功获取到access token和openid后,就可以调用相关OpenAPI了。
建议网站在用户登录后,即调用getUserInfo接口获得该用户的头像、昵称并显示在网站上,使用户体验统一。
SDK目前封装的OpenAPI如下(在SDK包中的位置:\TencentOAuthDemo\TencentOAuth\TencentOAuth.h) :
* Get user info.
- (BOOL)getUserI
* Get List Album.
- (BOOL)getListA
* Add share.
- (BOOL)addShareWithParams:(NSMutableDictionary *)
* Upload picture.
- (BOOL)uploadPicWithParams:(NSMutableDictionary *)
* Add Album.
- (BOOL)addAlbumWithParams:(NSMutableDictionary *)
* Add One Blog.
- (BOOL)addOneBlogWithParams:(NSMutableDictionary *)
* Add topic.
- (BOOL)addTopicWithParams:(NSMutableDictionary *)
* Check Page Fans.
- (BOOL)checkPageFansWithParams:(NSMutableDictionary *)
* Get List Photo.
- (BOOL)getListP
OpenAPI调用举例说明如下:
NSMutableDictionary* params = [NSMutableDictionary
dictionaryWithObjectsAndKeys:
@"iosSDK接口测试相册",@"albumname",
@"我的测试相册",@"albumdesc",
@"1",@"priv",
[_tencentOAuth addAlbumWithParams:params];
开发者在用户成功登录后,只需简单调用addAlbumWithParams即可创建一个空间相册,该相册名为“iosSDK接口测试相册”,描述为“我的测试相册”,权限为“公开”。
正确调用相关API后,只需在相关回调里查看返回的数据即可。
* Called when the get_user_info has response.
- (void)getUserInfoResponse:(APIResponse*)
* Called when the get_list_album has response.
- (void)getListAlbumResponse:(APIResponse*)
* Called when the get_list_photo has response.
- (void)getListPhotoResponse:(APIResponse*)
* Called when the check_page_fans has response.
- (void)checkPageFansResponse:(APIResponse*)
* Called when the add_share has response.
- (void)addShareResponse:(APIResponse*)
* Called when the add_album has response.
- (void)addAlbumResponse:(APIResponse*)
* Called when the upload_pic has response.
- (void)uploadPicResponse:(APIResponse*)
* Called when the add_one_blog has response.
- (void)addOneBlogResponse:(APIResponse*)
* Called when the add_topic has response.
- (void)addTopicResponse:(APIResponse*)
OpenAPI回调查看举例说明如下:
* Called when the addAlbum has response.
- (void)addAlbumResponse:(APIResponse*) response{
for (id key in response.jsonResponse) {
NSLog(@“key=%@,value=%@”,key,[response.jsonResponse
objectForKey:key]);
调用addAlbumWithParams后,只需实现addAlbumResponse即可查看返回数据。返回的错误码及相关数据封装在APIResponse中,开发者按照自己的需求取值即可。url Delphi从一个url快捷方式获取url地址 - 为程序员服务
为程序员服务
Delphi从一个url快捷方式获取url地址
function URLFromShortcut(const Shortcut: string):
Ini: IniFiles.TIniF // object used to read shortcut file
// Return URL item from [InternetShortcut] section of shortcut file
Ini := IniFiles.TIniFile.Create(Shortcut);
Result := Ini.ReadString('InternetShortcut', 'URL', '');
// We return '' on error
Result := '';
您可能的代码
相关聚客文章
相关专栏文章自定义 URL Scheme 完全指南 - 心境 - 博客园
随笔 - 10, 文章 - 0, 评论 - 0, 引用 - 0
iPhone / iOS SDK 最酷的特性之一就是应用将其自身&绑定&到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用。
本文转自,原文:《》
注册自定义 URL Scheme
注册自定义 URL Scheme 的第一步是创建 URL Scheme & 在 Xcode Project Navigator 中找到并点击工程 info.plist 文件。当该文件显示在右边窗口,在列表上点击鼠标右键,选择 Add Row:
向下滚动弹出的列表并选择 URL types。
iOS Custom URL Scheme
点击左边剪头打开列表,可以看到 Item 0,一个字典实体。展开 Item 0,可以看到 URL Identifier,一个字符串对象。该字符串是你自定义的 URL scheme 的名字。建议采用反转域名的方法保证该名字的唯一性,比如 com.yourCompany.yourApp。
urlScheme2a
点击 Item 0 新增一行,从下拉列表中选择 URL Schemes,敲击键盘回车键完成插入。&
iOS Custom URL Scheme
注意: URL Schemes 是一个数组,允许应用定义多个 URL schemes。&
iOS Custom URL Scheme
展开该数据并点击 Item 0。你将在这里定义自定义 URL scheme 的名字。只需要名字,不要在后面追加 :// & 比如,如果你输入 iOSDevApp,你的自定义 url 就是 iOSDevApp://&
iOS Custom URL Scheme
此时,整个定义如下图:&
iOS Custom URL Scheme
虽然我赞同 Xcode 使用描述性的名字的目的,不过看到创建的实际的 key 也是非常有用的。这里有一个方便的技巧,右键点击 plist 并选择 Show Raw Keys/Values,就能看到以下效果:&
iOS Custom URL Scheme
还有另一种有用的输出格式,XML,因为可以非常容易的看到字典和原始数组及其包括的实体的结构。点击 plist 并选择 Open As & Source Code:&
iPhone Custom URL Scheme
从 Safari 中调用自定义 URL Scheme
定义了 URL scheme,我们可以运行一个快速测试来验证应用是否如我们所期望的被调用。在这之前,我创建了一个准 UI 以辨别带有自定义 URL 的应用。该应用只有一个 UILabel,带有文本 &App With Custom URL&()。&
iOS App with Custom URL
使用模拟器调用应用的步骤:
1. 在 Xcode 中运行应用
2. 一旦应用被安装,自定义 URL scheme 就会被注册
3. 通过模拟器的硬件菜单中选择 Home 来关闭应用
4. 启动 Safari
5. 在浏览器地址栏输入之前定义的 URL scheme(如下)&
Call Custom URL Scheme from Safari
此时 Safari 将会关闭,应用会被带回到前台。祝贺你刚刚使用自定义 URL scheme 调用了一个 iPhone 应用。
从另一个 iPhone 应用中调用自定义 URL Scheme
让我们看看如何从另一个应用中调用自定义 URL scheme。我又创建了一个非常简单的 iPhone 应用,它只有一个 UILabel 和一个 UIButton & 前者显示了一段信息,告诉你这个应用将要通过自定义 URL scheme 来调用另一个应用,按钮则开始这个行为()。&
iPhone app that call Custom URL Scheme
buttonPressed 方法中的代码处理 URL 调用:&
-&(void)buttonPressed:(UIButton&*)button&
&&NSString&*customURL&=&@"iOSDevTips://";&
&&if&([[UIApplication&sharedApplication]&
&&&&canOpenURL:[NSURL&URLWithString:customURL]])&
&&&&[[UIApplication&sharedApplication]&openURL:[NSURL&URLWithString:customURL]];&
&&&&UIAlertView&*alert&=&[[UIAlertView&alloc]&initWithTitle:@"URL&error"&
&&&&&&&&&&&&&&&&&&&&&&&&&&message:[NSString&stringWithFormat:&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&@"No&custom&URL&defined&for&%@",&customURL]&
&&&&&&&&&&&&&&&&&&&&&&&&&&delegate:self&cancelButtonTitle:@"Ok"&
&&&&&&&&&&&&&&&&&&&&&&&&&&otherButtonTitles:nil];&
&&&&[alert&show];&
第 5 行代码检查自定义 URL 是否被定义,如果定义了,则使用 shared application 实例来打开 URL (第 8 行)。openURL: 方法启动应用并将 URL 传入应用。在此过程中,当前的应用被退出。
通过自定义 URL Scheme 向应用传递参数
有时你需要通过自定义 URL 向应用中传递参数。让我们看看该如何完成这个工作。
NSURL 作为从一个应用调用另一个的基础,遵循&&(Relative Uniform Resource Locators) 标准。 因此你所熟悉的基于网页内容的 URL 格式在这里也适用。
在自定义了 URL scheme 的应用中,app delegate 必须实现以下方法:&
-&(BOOL)application:(UIApplication&*)application&
&&openURL:(NSURL&*)url&
&&sourceApplication:(NSString&*)sourceApplication&
&&annotation:(id)annotation&
从一个应用传递参数到另一个的诀窍是通过 URL。例如,假设我们使用以下的 URL scheme,想传递一个名为 &token&的参数和一个标识注册状态的标志,我们可以像这样创建一个 URL:&
NSString&*customURL&=&@"iOSDevTips://?token=123abct&registered=1";&
在 web 开发中,字符串 ?token=123abct&registered=1 被称作查询询串(query string)。
在被调用(设置了自定义 URL)的应用的 app delegate 中,获取参数的代码如下:&
-&(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]);&
&&return&YES;&
以上代码在应用被调用时的输出为:&
Calling&Application&Bundle&ID:&com.3Sixty.CallCustomURL&
URL&scheme:iOSDevTips&
URL&query:&token=123abct&registered=1&
注意 &Calling Application Bundle ID&,你可以用这个来确保只有你定义的应用可以与你的应用直接交互。
让我们改变一下代码,来验证发起调用的应用的 Bundle ID 是否合法:&
-&(BOOL)application:(UIApplication&*)application&openURL:(NSURL&*)url&
&&&&&&&&sourceApplication:(NSString&*)sourceApplication&annotation:(id)annotation&
&&if&([sourceApplication&isEqualToString:@"com.3Sixty.CallCustomURL"])&
&&&&NSLog(@"Calling&Application&Bundle&ID:&%@",&sourceApplication);&
&&&&NSLog(@"URL&scheme:%@",&[url&scheme]);&
&&&&NSLog(@"URL&query:&%@",&[url&query]);&
&&&&return&YES;&
&&&&return&NO;&
有一点要特别注意,你不能阻止其他应用通过自定义 URL scheme 调用你的应用,然而你可以跳过后续的操作并返回 NO,就像上面的代码那样。也就是说,如果你想阻止其它应用调用你的应用,创建一个与众不同的 URL scheme。尽管这不能保证你的应用不会被调用,但至少大大降低了这种可能性。
自定义 URL Scheme 示例工程
我意识到按照本文的每一步做下来还是有一点复杂的。我做好了两个非常基础的 iOS 应用,一个自定义了 URL scheme,另一个则去调用它,并传递了一个比较短的参数列表(query string)。这些是体验自定义 URL 的很好的入门点。

我要回帖

更多关于 ios 自定义scheme 的文章

 

随机推荐