如何在 Swift 中使用 URL 方案获取发件人的 ID

Posted

技术标签:

【中文标题】如何在 Swift 中使用 URL 方案获取发件人的 ID【英文标题】:How can I get the sender's id using URL scheme in Swift 【发布时间】:2019-04-12 12:42:44 【问题描述】:

我正在将一些遗留的 Objective-C 代码翻译成 Swift。在这里,我正在努力处理一些 URL 方案。

应用程序委托中的以下 Objective-C 代码返回外部应用程序的 id,它通过 URL 方案发送消息:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url
  options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options 

      NSString *appName = [options valueForKey:@"UIApplicationOpenURLOptionsSourceApplicationKey"];
      NSString *urlVal = [url absoluteString];
      NSLog(@"external url scheme call from app %@: %@", appName, urlVal);
      return TRUE;

  

在 Swift 中,存在相同的方法,但在选项字典中,不再有关于发送应用程序的信息。此外,我无法打印 国外应用的id:

func application(_ app: UIApplication, open url: URL, 
     options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool 

       let appName = options[.sourceApplication]
       let urlVal = url.absoluteString
       NSLog("external url scheme call from %@: %@", appName, urlVal)
       return true


所以问题是:如何在上述方法的 Swifts 实现中获取发送应用程序的 id?

【问题讨论】:

请edit 提出您的问题并展示您的尝试(如下面答案的 cmets 中所述)。清楚地解释您在这些尝试中遇到的问题。 【参考方案1】:

下面是您问题的确切答案。检查此键options[.sourceApplication]

// --------- OPEN APP WITH URL -----------
func application(_ application: UIApplication,
                 open url: URL,
                 options: [UIApplication.OpenURLOptionsKey : Any] = [:] ) -> Bool         

    // Determine who sent the URL.
    let sendingAppID = options[.sourceApplication]
    print("source application = \(sendingAppID ?? "Unknown")")

    if let string = sendingAppID as? String, string == "com.apple.springboard" 
        if let components = url.queryCryptoenterDict 
            qRcode(dictionary: components)
        
        return true // just to quit from function
    

qRcode(:) 是我的二维码处理程序。

【讨论】:

对不起,我忘了提,我已经尝试过options[.sourceApplication]。结果是一个有效载荷数据列表。 我更进一步:当我使用print 语句时,这似乎还可以。之前我用NSLog,没用。【参考方案2】:

问题在于 Swift 中的 NSLog。 使用源应用程序的 debugDescription 属性修复了问题:

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool 
let appName = options[.sourceApplication].debugDescription
let urlVal = url.absoluteString
NSLog("external url scheme call from %@: %@", appName, urlVal)
return true

【讨论】:

以上是关于如何在 Swift 中使用 URL 方案获取发件人的 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 chrome-cast API 在发件人应用程序中获取设备名称列表

如何在 Swift 中使用 URL 从库中获取图像? [复制]

如何使用 Swift 从 URL 获取 HTML 源代码

如何在 Swift 中知道发件人的标识符

在Browsable活动中查找意图发件人的URL

(Swift) 如何获取 documentPicker URL 的数据表示