我的应用使用SafariViewController通过网页付款。 SafariViewController打开带有付费Web小部件的链接。 交易完成后,将通过uiapplicationdelegate的实例方法application(_:open:options :)自动将用户重定向到该应用。 我们发现执行SafariViewcontroller时会随机调用方法application(_:open:options :),而没有任何人调用它,并且url是过去完成的事务。 这里有一些详细的代码。
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if (url.scheme == "myAppTest") {
NotificationCenter.default.post(name: Notification.Name("CallbackNotification"), object: url)
return true
}
return true
}
在ViewController中,SafariViewController的调用方式如下:
NotificationCenter.default.addObserver(self, selector: #selector(safariPay(_:)), name: Notification.Name("CallbackNotification"), object: nil)
self.safariVC = SFSafariViewController(url: URL(string: authURL)!)
safariVC.delegate = self
self.present(safariVC, animated: true, completion: nil)
很明显,已经插入了从NotificationCenter中删除观察的方法。
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
NotificationCenter.default.removeObserver(self, name: Notification.Name("CallbackNotification"), object: nil)
}
我想了解这是否是代码方面的问题,也就是说,是否缺少某些控件,或者SafariViewController是否在内存中保留了可能触发此错误的内容。