Universal Link 打开应用程序,但无法在 Swift 中的 UserDefaults 中保存 user_id

问题描述 投票:0回答:1

我在 iOS 应用程序中使用通用链接,并且该链接可以按预期正确打开应用程序。但是,我在将 URL 中的 user_id 参数保存到 UserDefaults 时遇到问题。这是我的设置:

import UIKit

class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
              let incomingURL = userActivity.webpageURL else {
            return false
        }

        // Check for "open" in path and get the "user_id" query parameter
        if incomingURL.pathComponents.contains("open"),
           let userID = incomingURL.queryParameters?["user_id"] {
            
            // Attempt to save userID to UserDefaults
            UserDefaults.standard.set(userID, forKey: "user_id")
            return true
        }

        return false
    }
}

URLExtensions.swift

import Foundation

extension URL {
    var queryParameters: [String: String]? {
        var params = [String: String]()
        let queryItems = URLComponents(url: self, resolvingAgainstBaseURL: false)?.queryItems
        queryItems?.forEach {
            params[$0.name] = $0.value
        }
        return params
    }
}

链接如下所示:

https://example.com/open?user_id=12345

应用程序可以使用通用链接正确打开,但

user_id
未按预期保存到
UserDefaults

我已验证 URL 结构以及链接中存在

user_id
参数。但是,稍后检索
UserDefaults.standard.string(forKey: "user_id")
时,它会返回
nil

我的代码中是否遗漏了某些内容,导致 user_id 无法保存?

swift
1个回答
0
投票

从您的示例链接来看,您的“user_id”似乎是一个整数,因此请尝试使用

UserDefaults.standard.integer(forKey: "user_id")

© www.soinside.com 2019 - 2024. All rights reserved.