canOpenUrl 失败,但 openUrl 成功

2024-02-25

我面临一个奇怪的问题。 我正在使用 xcode 7.2、iOS 9,在真实设备 iphone 4S(不是模拟器)上工作。

我有 2 个应用程序,app1 和 app2。 app1 应该使用 url 方案将数据发送到 app2。 app2已经很好地声明了该方案 app1 已引用 plist 中的方案(因为 iOS9 中需要)

<key>LSApplicationQueriesSchemes</key>
    <array>
        <array>
            <string>OpenLinkMyData</string>
        </array>
    </array>

这是我使用的代码:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0) , ^{

            // build the url, using the scheme name, and the data
            // note that json is escaped from bad url chars.
            NSString * MyJsonDataWellEscaped = [[SomeClass getJSonDataToExport]   stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            NSURL * url = [NSURL URLWithString:[NSString stringWithFormat:@"OpenLinkMyData://%@",MyJsonDataWellEscaped]];

            // Next line should allow test if the app able to manage that scheme is installed.
            // BUT in our case, this allways returning false.
            bool can = [[UIApplication sharedApplication] canOpenURL:url];
            NSLog(@"canOpenUrl = %@", can?@"true":@"false");
         });
// code of the app that do stuff...
}

我得到以下日志: -canOpenURL:URL 失败:“OpenLinkMyData://(myJsonSuff)” - 错误:“不允许此应用程序查询方案 OpenLinkMyData” 可以打开网址 = false

但如果我使用以下代码:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0) , ^{
            // build the url, using the scheme name, and the data
            // not that json is escaped from bad url chars.
            NSString * MyJsonDataWellEscaped = [[Move2MyMHelper getJSonDataToExport]   stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            NSURL * url = [NSURL URLWithString:[NSString stringWithFormat:@"OpenLinkMyData://%@",MyJsonDataWellEscaped]];

            if([[UIApplication sharedApplication] openURL:url])
                {
                NSLog(@"App launched OK");
                }
            else
                {
                NSLog(@"App not launched");
                }

        });

       // code of the app that do stuff...
}

如果我不检查方案是否可用并直接使用它,App2 会很好地打开并根据需要获取所有数据。 (否则,如果未安装 app2,我会收到“应用程序未启动”日志)。

这是用于接收数据的 App2 源(按预期工作):

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
     NSString *prefixToRemove = @"OpenLinkMyData://";
    if(url != nil && [[url absoluteString] hasPrefix:prefixToRemove])
        {
         NSString * urlStr = [url absoluteString];
         NSString * json = [urlStr substringFromIndex:[prefixToRemove length]];
         json = [json stringByRemovingPercentEncoding];
         NSLog(@"OpenLinkMyData with json  : %@", json);
          }  
    return YES;
}

我的情况下 canOpenUrl 有什么问题?

谢谢你的帮助。


Making LSApplicationQueriesSchemes是一个字符串数组而不是字符串数组的数组:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>OpenLinkMyData</string>
</array>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

canOpenUrl 失败,但 openUrl 成功 的相关文章

  • iOS:如何创建核心数据库的备份副本?以及如何导出/导入该副本?

    我想为我的应用程序的用户提供创建核心数据数据库备份的可能性 特别是在他切换到新设备等情况下 我该怎么做呢 特别是如何重新导入该文件 我的意思是 假设他制作了数据库的备份副本 然后更改了大量内容并想要重置为以前保存的备份副本 我该怎么做呢 T
  • 具有隐式授权的 OAuth 应用程序中的客户端模拟

    来自 OAuth 草案 隐式section https datatracker ietf org doc html draft ietf oauth v2 31 section 1 3 2 在隐式授权流程期间发出访问令牌时 授权服务器不对客
  • iOS 目标 c 中的 AES/CBC/PKCS5Padding 结果与 Android 不同

    我在 Android 应用程序中使用 AES CBC PKCS5Padding 代码就像 private static String TRANSFORMATION AES CBC PKCS5Padding private static St
  • 解析iOS如何通过相关PFObject中的属性查询对象?

    我正在编写一个 iOS 应用程序 并使用 Parse 在服务器端存储数据 我有用户 每个用户可以拥有一辆汽车 我试图弄清楚如何编写一个查询 使我能够获取所有拥有年份小于 2000 年并且具有某种颜色 比如说红色 汽车的用户 每辆汽车与用户都
  • 如何打开/关闭 iPhone 相机闪光灯 swift 2?

    我正在寻找如何打开 关闭 iPhone 的相机闪光灯 我发现了这个 IBAction func didTouchFlashButton sender AnyObject let avDevice AVCaptureDevice defaul
  • 如何使用文档提供者扩展?

    我正在学习更多有关 ios 扩展的知识 例如 今日扩展 照片编辑扩展 动作延伸 自定义键盘扩展 在所有这些中 我在学习上没有困难 但最近我尝试学习 文档提供程序扩展 令我惊讶的是 在互联网上没有找到任何相关教程谈论如何使用它 与其他人一样一
  • Xcode 6 Save for Enterprise Deployment 不再为 ipa 创建 plist?

    Xcode 5 帮助为企业 ipa 创建 plist 描述符 Xcode 6 6A313 仅创建 ipa 这是错误还是有意更改 如果是这样 退后一步的原因是什么 如果我之前没有使用 Xcode 5 生成 plist 我需要自己手动构建它 您
  • iOS:GMail API - 通过电子邮件发送附件

    我能够成功发送没有附件的电子邮件 但是 当我尝试使用 GTLUploadParamaters 上传附件时 出现 501 错误 我尝试添加照片库中附件的 NSData 以及仅发送图像的 URL 在这两种情况下我都得到了同样的错误 Create
  • 苹果的外部配件(蓝牙)仅适用于 MFI 设备? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的学士论文的目标是通过蓝牙适配器将光串行设备连接到 iPad 目前我正在努力应对苹果的限制 我经常在网上看到我可以使用支持的配置文件 h
  • Alamofire 仅在 GET 请求上出现请求错误

    我正在努力将我的项目从 AFNetworking 转移到 Alamofire 真的很喜欢这个项目 POST 请求工作得很好 但是 我在尝试发出 GET 请求时收到此错误 这是一些示例代码 class func listCloudCrednt
  • 数组索引超出范围的表视图

    我正在使用数组从数据库读取数据 目前数组中有 8 个项目 我正在尝试制作一个有节标题的表格 目前我有 4 个部分 并且我已正确设置并且它有效 它也可以在第一次运行时运行 但是当我尝试向后滚动时 我发现索引超出了范围 我正在使用 myarra
  • iOS 上的三字母国家代码

    我知道您可以在 iOS 上获取所有国家 地区的两个字母的国家 地区代码 但是有没有办法获得三个字母的国家代码 So from http en wikipedia org wiki ISO 3166 1 alpha 2 http en wik
  • NSNotification 与dispatch_get_main_queue

    和 关联这个问题 https stackoverflow com questions 7905192 iphone grand central dispatch main thread我想知道关于何时使用 NSNotification 在主
  • iOS 上邮件到达时收到通知吗?

    当邮件到达标准邮件应用程序时 有没有办法让应用程序收到通知 更准确地说 我想编写一个应用程序 它能够从标准邮件应用程序读取传入的电子邮件 其中包含自定义 txt 格式的新联系人或事件 然后 应用程序应将此新联系人 事件添加到 ipad 反之
  • 以编程方式进行排序时检索 ViewController 堆栈

    static func showMenuView parentVC UIViewController let storyboard UIStoryboard name Main bundle nil let resultController
  • 如何在调用-reloadData后保留UITableView contentoffset

    CGPoint offset table contentOffset table reloadData table setContentOffset offset animated NO unuseful block UITableView
  • 如何在 Cocoa with Core Data 中上传和存储文件?

    我有一个应用程序 我希望能够将文件上传到其中 我可以想象序列化数据 将其放入数组中 然后序列化数组并将其放入核心数据中 但这似乎不太正确 我还可以想象将文件复制到应用程序的支持文件中 获取这些文件的 NSURL 并存储数组或 NSURL 无
  • Quickblox 聊天未进行身份验证

    我在我的应用程序中使用 Quickblox 进行一对一聊天 用户已经登录 但是当我尝试登录聊天时 出现以下错误 2014 03 31 12 42 09 532 MyChat 2175 3803 QBChat didNotAuthentica
  • 奇怪的 Facebook ID [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有两个 Facebook 应用程序 它们都正在开发中 其中一个是很久以前创建的 而另一个则是相当新的 自从我升级到新的 iOS Faceb
  • Eddystone 信标检测问题

    以下是我使用 iPhone iOS 9 检测 Eddystone 的代码 void viewDidLoad super viewDidLoad if CLLocationManager locationServicesEnabled loc

随机推荐

  • 我可以安全地查询被 WRITE_TRUNCATE 替换的 BigQuery 表吗

    If configuration load writeDisposition https developers google com bigquery docs reference v2 jobs configuration load wr
  • 为 iPad / iPhone 加载不同的启动屏幕

    我想为 iPad 和 iPhone 加载不同的启动屏幕故事板 为此我在 info plist 中添加新条目 如下所示 但它只加载 iPhone 启动屏幕 任何帮助将不胜感激 提前致谢 Way 1 为此 您必须使用两个 xib 一款适用于 i
  • 如何用Java创建停靠面板?

    如何用 Java 创建停靠面板 如果你想使用Swing http en wikipedia org wiki Swing 28Java 29在你的应用程序中的对接框架中 有一些已经存在 InfoNode http www infonode
  • 读取带有unicode字符的文件

    我有一个 asp net c 页面 并尝试读取具有以下字符 的文件并将其转换为 从倾斜撇号到撇号 FileInfo fileinfo new FileInfo FileLocation string content File ReadAll
  • 如何使用 python 列出可用的测试?

    如何列出所有发现的测试 我发现这个命令 python3 4 m unittest discover s 但这并不完全是我想要的 因为上面的命令执行测试 我的意思是让我们有一个包含大量测试的项目 执行时间为几分钟 这迫使我必须等到测试完成 我
  • asp.net mvc从视图修改主文件

    我需要从视图文件 aspx 将类属性添加到正文标记 但该标记位于主文件中 如何从视图访问 body 标签 在你的视图输出中你可以添加一个jQuery http api jquery com addClass 执行此操作的客户端脚本将在页面拼
  • 将货币价值存储为美分/小单位有哪些缺点?

    我注意到一些金融 api 例如用于信用卡处理的 stripe api 要求将金额以美分形式传递 这似乎是一个很好的简化 这让我想知道为什么我不在我当前的应用程序中的所有地方都这样做在我的 Java 代码中使用数据库 NUMERIC 无限长度
  • 停止 shell 通配符扩展?

    有没有办法让编译后的命令行程序告诉 bash 或 csh 它不希望在其参数中扩展任何通配符 例如 人们可能需要一个 shell 命令 例如 foo 简单地返回该字符的 ASCII 数字值 不会 扩展发生在命令实际运行之前 您只能在运行命令之
  • 如何在报告中插入两页

    我面临一个问题 还有两个问题jrmxl文件 我想加入其中pdf文件 但每个都在一页中 我看到了下面的一些提示 但我不知道它们是否是最好的 因为我的第一个文件有 3 个频段 title detail and summary 第二个有detai
  • 如何获取 UITableView 标签文本字符串 - 自定义单元格

    我有一个带有自定义单元格的 UITableView 自定义单元格包含 UILabel 和 UIImageView 我在网上看到 当用户按下单元格时 可以从普通的 UITableView 单元格获取文本并将其存储在字符串中 但是 当您使用自定
  • 如何从不同的范围创建对象

    我在 Guice 中有一个范围单例的对象 在方法中f 我想创建一个新对象 但让 Guice 进行注入 我认为传递注射器并不是一个好的做法 那么我怎样才能获得一个新的 Guicy 对象实例呢 正如上面所建议的 提供商可能是做到这一点的方法 这
  • 功能检测自动播放 HTML5 音频 - 移动浏览器上的音频

    因此 我有一个网站 用户希望演示服务器端脚本生成的音频输出 他们选择一些选项并点击创建按钮 然后我在 HTML5 音频元素中进行 AJAX 并将 autoplay 属性设置为 true 这在桌面上效果很好 但在移动设备上效果不佳 到目前为止
  • 动态引用 Excel 工作表

    我有一个应该很简单的问题 但我没有解决它 我为一家商店打印了价目表 今年他们将零件编号分成了 5 张工作表 而不是一张 当用户想要打印价格标签时 她在 C10 中输入 单击工作表 价格表 并导航到她需要的零件号 C10 的计算公式为 价目表
  • 如何以编程方式从类的方法之一中查找类的公共属性

    我有课Foo具有公共和受保护的财产 Foo需要有一个非静态方法 getPublicVars 返回所有公共属性的列表Foo 这只是一个例子 我从outside the Foo对象调用get object vars http php net g
  • 使用主机系统上的客户端访问在虚拟机中运行的 HBase

    我尝试使用客户端程序将一些数据写入hbase HBase Hadoop 在 Cloudera ubuntu 的预配置虚拟机中运行 客户端运行在托管虚拟机的系统上 并直接在虚拟机中运行客户端 所以现在想使用vm外的客户端来访问vm上的服务器
  • 是否可以从命令行启动 IE 的代理设置对话框?

    有没有办法从 Windows 命令行启动 IE 代理设置对话框 以节省在任何应用程序中浏览菜单的时间 我发现了另一个更短的 inetcpl cpl 4 您可以在运行框或命令提示符中使用它
  • IE11 + Angular 1.5.11 上奇怪的渲染行为

    我们目前正在 Angular 版本 1 5 11 中开发一个应用程序 现在它已经变得相当大 数百个控制器等 我们偶然发现了 Internet Explorer 11 中的一个问题 一段时间后 有时是几分钟 有时是几个小时 页面开始出现渲染故
  • Visual Studio 无法识别我的网络摄像头激光测距仪代码的 MFC 库

    我尝试直接从互联网复制源代码 但由于下面发现的错误 我无法构建 调试整个文件 请帮忙 Error occurred while restoring NuGet packages System ArgumentException The pa
  • 如何使用 gdb 调试进程而不暂停它?

    我有一个已经在运行的进程 我想用 GDB 调试它 我一直在使用 gdb pid PID 但是 当我这样做时 该过程会暂停 我想附加到进程而不暂停它 并在它仍在运行时在其内存中查看 这可能吗 或者 有没有办法 分叉 该进程 以便我可以查看其内
  • canOpenUrl 失败,但 openUrl 成功

    我面临一个奇怪的问题 我正在使用 xcode 7 2 iOS 9 在真实设备 iphone 4S 不是模拟器 上工作 我有 2 个应用程序 app1 和 app2 app1 应该使用 url 方案将数据发送到 app2 app2已经很好地声