通过 URL 将令牌传递到 Webview IOS Swift
Posted
技术标签:
【中文标题】通过 URL 将令牌传递到 Webview IOS Swift【英文标题】:Pass Token Through URL into Webview IOS Swift 【发布时间】:2019-02-20 07:45:15 【问题描述】:您好,我正在使用 webview 在我的应用程序上显示我的内容。我成功注册了firebase。现在我想通过 URL 传递注册令牌以存储到数据库中以进行自定义通知。
appdelegate.swift
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
let token = deviceToken.map String (format: "%02.2hhx", $0).joined()
print(token)
Firebase
extension AppDelegate: MessagingDelegate
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String)
print("Firebase registration token: \(fcmToken)")
//Saving fcmToken to pass to the url
let preferences = UserDefaults.standard
preferences.setValue(fcmToken, forKey: "token")
preferences.synchronize()
let dataDict:[String: String] = ["token": fcmToken]
NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)
// TODO: If necessary send token to application server.
// Note: This callback is fired at each app startup and whenever a new token is generated.
这是 viewcontroller.swift
override func viewDidLoad()
super.viewDidLoad()
//Retrieving the fcmToken
let prefs = UserDefaults.standard
let token = prefs.string(forKey: "token")
//?token= \(token as Optional)&device=ios
webView.load(URLRequest(url: URL(string: "https://instaglamexpress.com/app/customer/?device=ios&token=\(String(describing: token))")!))
我无法将令牌发送到 URL..
请提出解决方案。
【问题讨论】:
你可以这样发送:***.com/q/1142562/2323806 你不需要使用synchronize
【参考方案1】:
您需要在这里与if let
进行可选绑定,因为prefs.string(forKey: "token")
将返回可选值。
考虑下面的代码:
let prefs = UserDefaults.standard
if let token = prefs.string(forKey: "token")
//token is not optional anymore
webView.load(URLRequest(url: URL(string: "https://instaglamexpress.com/app/customer/?device=ios&token=\(token))")!))
或者您可以使用 guard let
来完成同样的工作。
【讨论】:
我现在出现黑屏...当我尝试运行模拟器和真实设备时... 您在浏览器中检查过该网址吗? [C1.1:2][0x7fd37a80fa30] 获取输出帧失败,状态 8196...我正在将它放入信息栏... 你能打印"https://instaglamexpress.com/app/customer/?device=ios&token=\(token))"
并分享结果吗?
在哪里以及如何打印...??我在所有输出中都收到“获取输出帧失败,状态 8196”..【参考方案2】:
您好,测试了您的代码并进行了修改,它可以工作
最后一部分的修改
override func viewDidLoad()
super.viewDidLoad()
//Retrieving the fcmToken
let prefs = UserDefaults.standard
let token = prefs.string(forKey: "token") ?? ""
webView.load(URLRequest(url: URL(string: "https://instaglamexpress.com/app/customer/?device=ios&token="+token)!))
它只是一个字符串,Xcode 建议合并
let token = prefs.string(forKey: "token") ?? ""
只需将令牌用作常规变量,而不需要花哨的东西"url"+token
和瞧
;)
注意:当你点击播放并且 xcode 编译它时,它是空的(但只是第一次)你退出应用程序并正常重新打开,一切正常。
【讨论】:
以上是关于通过 URL 将令牌传递到 Webview IOS Swift的主要内容,如果未能解决你的问题,请参考以下文章
如何将 firebase 令牌传递给 Laravel 应用程序?