【问题标题】:How to check if an iOS app is installed without canOpenURL [duplicate]如何检查是否在没有 canOpenURL 的情况下安装了 iOS 应用程序 [重复]
【发布时间】:2021-05-30 19:52:13
【问题描述】:

here 所述,用于验证应用是否安装了“some.bundle.id://”方案,并且可以使用 canOpenURL 技术。

但是,我在 SwiftUI 5 和 iOS 14.1 中发现它并不总是有效,例如

// Works    
UIApplication.shared.canOpenURL(URL(string: "com.garmin.connect.mobile://")!)  

// Doesn't work
UIApplication.shared.canOpenURL(URL(string: "com.fitbit.FitbitMobile://")!)    

我在连接到 iPhone 的 Mac 控制台应用程序日志中发现了以下错误。看起来 Fitbit 应用程序正在阻止查询:

default 12:03:34.339735-0700    2fahub  -canOpenURL: failed for URL: "FitbitMobile://app" - error: "This app is not allowed to query for scheme fitbitmobile"

在我的 Xcode 调试窗口中,我可以看到:

2021-05-30 12:46:16.416998-0700 2fahub[588:100068] -canOpenURL: failed for URL: "com.fitbit.FitbitMobile://" - error: "The operation couldn’t be completed. (OSStatus error -10814.)"

在我的应用中查询权限设置正确

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>com.garmin.connect.mobile</string>
    <string>com.fitbit.FitbitMobile</string>
</array>

还有什么可以用来确保它始终有效? iOS 中有没有类似 Android 的 PackageManager API 的东西?

更新#1:

其实 Fitbit 论坛提供的答案是正确的。 Fitbit 的方案必须是“fitbit://”,鉴于此应用程序的捆绑 ID 是 com.fitbit.FitbitMobile,因此完全不清楚为什么。 'fitbit' 不是应用名称,也不是整个捆绑 ID。在 Garmin 的情况下,我必须使用整个捆绑 ID 才能使其正常工作。很高兴知道这里的规则到底是什么。如果需要添加更多应用进行验证,我该怎么办?

【问题讨论】:

    标签: ios swiftui


    【解决方案1】:

    Fitbit 的 URL Scheme 似乎不是 com.fitbit.FitbitMobile://(这是它的捆绑包 ID)\

    试试 fitbit://

    这两个帖子似乎可以正常工作
    Answer from 2016 - community.fitbit.com
    Answer from 2020 - community.fitbit.com

    【讨论】:

    • 谢谢。 “fitbit://”有效,但绝对不清楚为什么 fitbit 不是应用程序名称,也不是整个捆绑 ID。请投票重新开放,因为其他裁判绝对没有意义
    • fitbit 是将捆绑 ID 或应用程序名称放在 LSApplicationQueriesSchemes 上的 URL 方案根本不起作用,LSApplicationQueriesSchemes - Summary。 garmin 很有可能将其 URL Scheme 和 bundle ID 设置为 com.garmin.connect.mobile
    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2016-11-27
    相关资源
    最近更新 更多