当 didRegisterForRemoteNotificationsWithDeviceToken 被调用时,我试图向我的服务器发送一个 apns 令牌。我可以成功地将令牌打印到控制台,所以我知道那部分正在工作。
我还在我的 Web 服务上实现了这样一个端点,它也与我的应用程序的其余部分一起工作得很好。
在Apple Developer 文档中,在名为 Forward Tokens to Your Provider Server 的最后一部分下,它说
收到设备令牌后,打开从您的应用程序到您的提供商服务器的网络连接。将设备令牌和识别特定用户所需的任何其他信息安全地转发到您的服务器。例如,您可以包含用户的登录名或将他们连接到您的服务的内容。
实际上,我如何包含这样的信息?我似乎无法将其他参数传递给 didRegisterForRemoteNotificationsWithDeviceToken,例如用户的访问令牌、用户 ID 等。
由于我使用的是 SwiftUI,所有用户的信息,包括他们的访问令牌,都@EnvironmentObject
在我的视图结构中。我需要切换到单身人士还是什么?
事实证明,单例可能是更好的实现。一旦您进入 didRegisterForRemoteNotificationsWithDeviceToken,您将无法从视图中访问任何内容,因此@EnvironmentObject
无用。
在我可以将登录的用户数据完全重组为单例(涉及删除/更改一堆代码)之前,我只是ApiAccessToken
在请求许可之前设置了一个单例(用户此时已登录)然后访问didRegisterForRemoteNotificationsWithDeviceToken 中的单例。
ApiTokenSingleton.swift
import Foundation
class ApiTokenSingleton
{
static let shared = ApiTokenSingleton()
private var token = ""
func getToken() -> String {
return token
}
func setToken(newToken: String) {
token = newToken
}
}
MyView.swift, onAppear, 当我请求访问时。authenticatedUser 是 EnvironmentObject
.onAppear() {
ApiTokenSingleton.shared.setToken(newToken: authenticatedUser.accessToken ?? "")
appDelegate.registerForPushNotifications()
}
AppDelegate.swift
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) }
let token = tokenParts.joined()
print("Device Token: \(token)")
// send token to backend here
let deviceService = DeviceService()
deviceService.add(accessToken: ApiTokenSingleton.shared.getToken(), deviceToken: token) { createDeviceResponse in
print(createDeviceResponse)
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句