zoukankan      html  css  js  c++  java
  • 如何实现通过URL超链接打开IOS的APP

    本文来自百度:

    http://zhidao.baidu.com/link?url=BRIvWtquPb9cDh33Khhowx8dp2VLuYs20wifJcwYJaXSv0vfYYrFF8U5elkqAoEolqDZ5mWWJ0IBO7Fq6Zoj9d-cGaxgpJHzZqe5IrjEftG&qq-pf-to=pcqq.discussion 
    最近要在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"]];
      }
  • 相关阅读:
    第一行代码--笔记(1)
    iOS UITableView深入
    iOS 数据库主键重复,依然可以插入
    UILabel文本高度自适应 不同系统出现问题
    UIlabel上的文字 距上 居左 对齐
    UILabel 自定义字体
    【整理】--VC 编译整理
    【整理】--【内核模块】简单例子,编译加载
    【原创】-- uboot,kennel,fs,rootfs 编译制作
    【原创】-- nfs安装配置及使用,挂载根文件系统
  • 原文地址:https://www.cnblogs.com/webgg/p/5344438.html
Copyright © 2011-2022 走看看