如何实现通过URL超链接打开IOS的APP

 我来答
huanglenzhi
推荐于2017-09-27 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517202
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部

  最近要在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启动另外一个应用:


  


  [csharp] view plaincopy

  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变量中或者打印出来:


  


  [csharp] view plaincopy

  -(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;

  }

  


  其他


  基本上至此我们就已经实现一个应用程序中启动另外一个应用的功能,但是为了是我们的代码更加强壮,我在网上又找了一段访问代码,如下:


  


  [csharp] view plaincopy

  // 检查用户是否配置了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];

  }

  }

  


  另外还有一段启动其他应用的代码:


  


  [csharp] view plaincopy

  -(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"]];

  }

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式