【发布时间】: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 才能使其正常工作。很高兴知道这里的规则到底是什么。如果需要添加更多应用进行验证,我该怎么办?
【问题讨论】: