通过 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 应用程序?

如何在 WKWebView 中支持授权令牌?

JS:如何通过重定向功能将url传递给登录功能

将 iOS 事件传递给 Ionic/Capacitor webview

ios中,长按Webview中的图片

如何将JSON Web令牌(JWT)传递给get请求