objective-c - 如何在 Swift 中使用 URL 方案获取发件人的 ID
问题描述
我正在将一些遗留的 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?
解决方案
下面是您问题的确切答案。检查这个键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(:)
我的二维码处理程序在哪里。
推荐阅读
- angular - 如何避免角度错误:- (node:19100) ExperimentalWarning: fs.promises API 是实验性的?
- xpath - Xpath 文本包含疑惑
- vector - Rust 如何为向量分配更多空间?
- c# - 为什么我无法在我的 Visual Studio ASP.NET MVC 解决方案中创建单元测试?
- javascript - 这需要哪个 webpack 加载器?
- python - Python - 应该将哪种编码应用于要传递给 hashlib.sha256() 的字符串?
- git - 如何自动化 Vue.js 应用程序的发布过程?
- javascript - 将任何电子邮件格式转换为 HTML
- node.js - Emailjs 有时只能与 Microsoft Edge 配合使用
- html - 如何制作垂直椭圆形的形状div?