* There is no use for URL identifier, even can be remove.
* If there are more that one app use the same URL Scehmer, openURL will open the last installed app. None esception will be raised. Could not be identified by URL identifier.
? Is it safe enough? Can the url be intercepted by the other app or cracker?
//************************************************************************************
最近要在IOS中实现一个应用启动另外一个应用的功能,搜了一些资料,使用UIApplication的openURL:的方法就能实现,现在整理和大家分享一下!
注册自定义URL协议
首先被启动的应用需要向iPhone注册一个自定义URL协议。这是在你的项目文件夹的info.plist文件进行的(就是你改变应用程序图标的同一个文件)。
Step1. 右键,选择“Add Row”Step2. Key值选择“URL types”
Step3. 打开“Item 0″,然后为该key增加一个URL identifier。可以是任何值,但建议用“反域名”(例如 “com.fcplayer.testHello”)。
Step4. 在“Item 0”下再加一行。
Step5. 选择“URL Schemes” 作为Key。
Step6. 输入你的URL协议名 (例如“testHello://” 应写做“testHello”)。如果有必要,你可以在这里加入多个协议。
操作截图如下:
访问自定义URL
在主应用程序中通过访问自定义URL启动另外一个应用:
- NSURL * myURL_APP_A = [NSURL URLWithString:@"testHello://"];
- if ([[UIApplication sharedApplication] canOpenURL:myURL_APP_A]) {
- NSLog(@"canOpenURL");
- [[UIApplication sharedApplication] openURL:myURL_APP_A];
- }
自定义处理URL
有些时候我们除了启动还需向另外一个应用发送参数,这是也可以通过自定义的URL来实现,如:
testHello://
testHello://com.fcplayer.testHello
testHello://config=1&abar=2
这时我们在被启动应用中就必须进行自定义处理,在delegate中实现该消息(Cocos2d加在AppDelegate中),例如:
- (BOOL)application:(UIApplication *)applicationhandleOpenURL:(NSURL*)url { // Do something withthe url here }
通常,我们会从参数中解析出URL以便在视图中显示或者存储到UserPreference。下面的例子把URL存储为User Preference的url变量中或者打印出来:
- -(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
- {
- if (!url) { return NO; }
- NSString *URLString = [url absoluteString];
- NSLog(@"%@",URLString);
- //[[NSUserDefaults standardUserDefaults] setObject:URLString forKey:@"url"];
- //[[NSUserDefaults standardUserDefaults] synchronize];
- return YES;
- }
其他
基本上至此我们就已经实现一个应用程序中启动另外一个应用的功能,但是为了是我们的代码更加强壮,我在网上又找了一段访问代码,如下:
- // 检查用户是否配置了AppId
- // 有没有准确配置Info的CFBundleURLSchemes字段
- // 是不是可以正确打开
- if (!kAppId) {
- UIAlertView *alertView = [[UIAlertView alloc]
- initWithTitle:@"Setup Error"
- message:@"Missing app ID. You cannot run the app until you provide this in the code."
- delegate:self
- cancelButtonTitle:@"OK"
- otherButtonTitles:nil,
- nil];
- [alertView show];
- [alertView release];
- } else {
- // Now check that the URL scheme fb[app_id]://authorize is in the .plist and can
- // be opened, doing a simple check without local app id factored in here
- NSString *url = [NSString stringWithFormat:@"fb%@://authorize",kAppId];
- BOOL bSchemeInPlist = NO; // find out if the sceme is in the plist file.
- NSArray* aBundleURLTypes = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleURLTypes"];
- if ([aBundleURLTypes isKindOfClass:[NSArray class]] &&
- ([aBundleURLTypes count] > 0)) {
- NSDictionary* aBundleURLTypes0 = [aBundleURLTypes objectAtIndex:0];
- if ([aBundleURLTypes0 isKindOfClass:[NSDictionary class]]) {
- NSArray* aBundleURLSchemes = [aBundleURLTypes0 objectForKey:@"CFBundleURLSchemes"];
- if ([aBundleURLSchemes isKindOfClass:[NSArray class]] &&
- ([aBundleURLSchemes count] > 0)) {
- NSString *scheme = [aBundleURLSchemes objectAtIndex:0];
- if ([scheme isKindOfClass:[NSString class]] &&
- [url hasPrefix:scheme]) {
- bSchemeInPlist = YES;
- }
- }
- }
- }
- // Check if the authorization callback will work
- BOOL bCanOpenUrl = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString: url]];
- if (!bSchemeInPlist || !bCanOpenUrl) {
- UIAlertView *alertView = [[UIAlertView alloc]
- initWithTitle:@"Setup Error"
- message:@"Invalid or missing URL scheme. You cannot run the app until you set up a valid URL scheme in your .plist."
- delegate:self
- cancelButtonTitle:@"OK"
- otherButtonTitles:nil,
- nil];
- [alertView show];
- [alertView release];
- }
- }
另外还有一段启动其他应用的代码:
- -(IBAction)openMaps {//打开地图
- // Where is Apple on the map anyway?
- NSString* addressText = @”1 Infinite Loop, Cupertino, CA 95014″;
- // URL encode the spaces
- addressText = [addressText stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];
- NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];
- // lets throw this text on the log so we can view the url in the event we have an issue
- NSLog(urlText);
- [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];
- }
- -(IBAction)openEmail {//打开mail
- // Fire off an email to apple support
- [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://devprograms@apple.com"]];
- }
- -(IBAction)openPhone {//拨打电话
- // Call Google 411
- [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8004664411"]];
- }
- -(IBAction)openSms {//打开短信
- // Text to Google SMS
- [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://466453"]];
- }
- -(IBAction)openBrowser {//打开浏览器
- // Lanuch any iPhone developers fav site
- [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://itunesconnect.apple.com"]];
- }
附参考链接:http://blog.csdn.net/arthurchenjs/article/details/6920631
相关推荐
MATLAB Schemer是一款专为MATLAB编程环境设计的皮肤工具,它允许用户自定义MATLAB的工作空间,包括背景颜色、字体颜色等视觉元素,旨在提供一个更舒适、更护眼的编程环境。这款工具提供了大约10种不同的皮肤样式供...
The Reasoned Schemer (MIT Press) (The MIT Press) By 作者: Daniel P Friedman – William E Byrd – Oleg Kiselyov – Jason Hemann ISBN-10 书号: 0262535513 ISBN-13 书号: 9780262535519 Edition 版本: second...
MATLAB Schemer可以轻松更改MATLAB显示和GUI的配色方案(即主题)。 您可以使用Schemer导入预定义的配色方案,在安装之间传输您的颜色设置,或者创建您自己的配色方案。 MATLAB接口具有用于显示文本和高亮语法的可定制...
《MATLAB Schemer:提升MATLAB编程视觉体验的利器》 MATLAB Schemer,一个专门为MATLAB设计的颜色主题工具,旨在优化编程环境的视觉效果,为MATLAB用户提供更加舒适、高效的编程体验。MATLAB Schemer的核心在于其...
《The Little Schemer:递归与函数式的奥妙》是一本久负盛名的经典之作,两位作者Daniel P. Friedman、Matthias Felleisen在程序语言界名声显赫。《The Little Schemer:递归与函数式的奥妙》介绍了Scheme的基本结构...
MATLAB Schemer 是一个专为 MATLAB 设计的颜色主题工具,尤其适合新手学习和使用。这个教程涵盖了如何在 MATLAB 环境中自定义和管理颜色方案,以提高代码的可读性和工作环境的舒适度。 MATLAB 是一种广泛使用的交互...
The Little Schemer The Little Schemer
Steele Jr.The notion that "thinking about computing is one of the most exciting things the human mind can do" sets both The Little Schemer (formerly known as The Little LISPer) and its new companion ...
很抱歉,但根据您提供的信息,"三部分之三 schemer3"似乎是一个不完整的或者非标准的IT概念,也没有明确的IT知识点关联。描述中的重复内容也没有提供额外的信息。标签同样只重申了标题,而压缩包子文件的文件名称...
《Matlab Schemer:定制你的专属Matlab配色方案》 Matlab是一款广泛应用于科学计算、数据分析和可视化领域的强大编程环境。为了提升代码编辑体验和视觉效果,开发者们经常需要对Matlab的工作环境进行个性化设置,...
The goal of The Reasoned Schemer is to help the functional programmer think logically and the logic programmer think functionally. The authors of The Reasoned Schemer believe that logic programming is...
标题《the seasoned schemer》和描述提到这是《The little schemer》的续集,同时是Scheme三部曲之二,也被称为scheme的灵魂。因此,知识点围绕Lisp语言中的Scheme方言以及递归编程技巧展开。 从给出的内容片段中,...
The Reasoned Schemer 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn...
the little schemer的姐妹篇,对于毫无编程经验的新手,本书也能带你初探计算的本质-递归。
选色 汉化绿色版 CoffeeCup Color Schemer 配色调色方案
Daniel P. Friedman The Little Schemer 续集
软件介绍 CoffeeCup Color Schemer一个快速、简洁、易用的色彩匹配工具,让您立刻制作出富有创造性的色彩主题,用新的 RYB 色环模式匹配色彩,用无限制的收藏色彩构建色彩主题,并可直接加亮关联色彩
《Color Schemer配色工具:开启网页设计的色彩之旅》 在网页设计的世界里,色彩搭配是一项至关重要的技能,它能决定一个网站的整体视觉效果和用户体验。Color Schemer,作为一款备受赞誉的配色工具,为设计师们提供...
color-schemer, 构建色彩方案的一种时髦方法 颜色 Schemer 颜色方案易于使用 SassColor schemer是一种用于Sass的健壮。 软件扩展了现有的 Sass颜色函数,并添加了诸如操作。* 集色调。* 设置亮度。淡色。色度等等...
The little schemer第十章解释器代码,里面包含了解释器用到的所有辅助函数,这个解释器和seasoned第二十章的解释器简单很多,比较好理解,在学习的朋友有需要可以看看