Universal Link открывает приложение, но не сохраняет user_id в UserDefaults.IOS

Программируем под IOS
Ответить
Anonymous
 Universal Link открывает приложение, но не сохраняет user_id в UserDefaults.

Сообщение Anonymous »

Я использую Universal Links в своем приложении для iOS, и ссылка правильно открывает приложение, как и ожидалось. Однако у меня возникли проблемы с сохранением параметра user_id из URL-адреса в 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
}
}
Как я вызываю идентификатор пользователя

Код: Выделить всё

import SwiftUI

struct ContentView: View {
@State private var userId: String = ""  // State for user_id to display it in the UI

var body: some View {
VStack {
Text("User ID: \(userId.isEmpty ? "Not Available" : userId)")
.foregroundColor(.white)
.padding()

Button("Check User ID") {
// For testing, manually fetch and display UserDefaults value
userId = getUserId()
print("Fetched User ID:", userId)
}
}
.onAppear {
// Fetch user_id when the view appears
userId = getUserId()
print("User ID on appear:", userId)
}
.background(Color.gray)
}

func getUserId() -> String {
// Retrieves user_id from UserDefaults
return UserDefaults.standard.string(forKey: "user_id") ?? ""
}
}
Ссылка выглядит следующим образом: https://example.com/open?user_id=a4a64b ... aee292614f
Приложение открывается правильно с помощью универсальной ссылки, но user_id не сохраняется в UserDefaults, как ожидалось.
Я проверил структуру URL-адреса и что параметр user_id существует в ссылке. Однако при получении UserDefaults.standard.string(forKey: "user_id") позже он возвращает nil.
Я что-то упустил в своем коде, что мешает user_id не будет сохранен?

Подробнее здесь: https://stackoverflow.com/questions/791 ... erdefaults
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»