问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ios 应用为什么打不开app链接地址

发布网友 发布时间:2022-04-20 13:00

我来回答

1个回答

热心网友 时间:2023-06-30 19:20

最近要在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:@""]];
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
swf文件结构 SWF EncryptSWF Encrypt和DoSWF对比 SWF EncryptSWF Encrypt的优点 怎么将swf格式的文件加密 怎样停用前置摄像头 苹果手机视频通话怎么关闭摄像头 ...中登网上查深A账户注销了,沪A账户还没注销? 购买了银行的理财产品,这个钱还可以在银行卡里面查到信息吗_百度... 西安购物广场有哪些 西安有哪些商业广场 如何利用 testflight 发 ios 链接 IOS手机安装维基链APP启动时,提示“未受信任的企业... ios为什么链接wifi进不了游戏 ios静态链接库和动态链接库的区别 ios9.3无法点开网站链接 ios9.3不能打开Safari内链... 从iOS的事件响应链看TableView为什么不响应touches... ios 链式编程 为什么没有提示 怎么让ios链接 ios链式调用出错 怎样用远程桌面实现两台电脑互连呀? 电脑连接的手机wifi,两台电脑都是怎么用windows自... 不同局域网内的两台电脑如何实现远程桌面控制 为什么indesign的页码会出现这个画面,该怎么处理? 两台电脑怎样连接可以打开另一台电脑 关于indesign页码的问题 两个电脑怎么远程 如何设置两台计算机间的远程连接问题 苹果手机可以录屏吗 INDESIGN自动页码放至最上不被其他图片覆盖 网上的... Indesign页码的问题 ios 怎麼判断消息是不是超链接 iOS面试 重零单排:什么是响应链,它是怎么工作的 iPhone系统IOS10,怎样下载磁力链接? 国外ios用什么下载磁力链接? iOS系统用什么软件可以下载磁力链接? 什么可以链接ios系统 Universal Links iOS中的通用链接是什么,什么机制... 冒险岛104版本 什么职业用G好? 我用的霸* 你懂的~ 冒险岛104职业,技能,任务,活动。详细介绍,你懂的 男朋友对你说104 是哪样意思 冒险岛104免费辅助~~~~790587889@qq.com 你懂的 (女)本人很肥,11岁有104斤了所以,你们懂得。我... 天正建筑8.5,D6RAABFW4 ,你懂的。 无锡广播电台104经济频道的林轩哪儿去了 电感元件上标的“104”是什么意思? 我想买索隆的四把刀,长度有不同,差了200块钱,两... 104的情商是什么状况,怎么办? 如何锻炼可长肉,本人18岁177cm只有104,杂办,给... 103规约与104规约的区别 麻将104张牌调多少栋