// Call MetaWallet
var requestComponents: URLComponents = URLComponents()
requestComponents.scheme = "metawallet://"
requestComponents.host = "co.inblock"
requestComponents.queryItems = [
URLQueryItem(name: "appReqKey", value: topic),
URLQueryItem(name: "appName", value: appName ?? name),
URLQueryItem(name: "appAction", value: "connect")
URLQueryItem(name: "appIcons", value: iconUrl!)
URLQueryItem(name: "appCallbackType", value: "universallink")
URLQueryItem(name: "appCallback", value: "smapleapp://metawallet")
]
if UIApplication.shared.canOpenURL(requestComponents.url) {
UIApplication.shared.open(url, options: [.universalLinksOnly:true]){ isSuccess in
if isSuccess {
// Success
} else {
// failed open app
}
}
}
//
// ==================================
//
// Result Process
// SceneDelegate.swift
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
if let userActivity = connectionOptions.userActivities.first {
self.scene(scene, continue: userActivity)
}
}
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
if let url = userActivity.webpageURL {
if url.host == nil || url.scheme == nil {
return
}
if url.host != "smapleapp" {
return
}
guard let param = url.parameters else {
return
}
if let reqKey = param["reqKey"] as? String {
if !RequestQueue.shared.pop(key: reqKey) {
return
}
let notificationName = NSNotification.Name(rawValue: reqKey)
NotificationCenter.default.post(name: notificationName, object: param)
return true
}
}
}