🐛 Fix NSE, get token from flutter side in native iOS

This commit is contained in:
2025-06-02 02:23:59 +08:00
parent c00987dfdc
commit e431a54a89
7 changed files with 59 additions and 11 deletions

View File

@ -1,6 +1,8 @@
import Flutter
import UIKit
import shared_preferences_foundation
@main
@objc class AppDelegate: FlutterAppDelegate {
let notifyDelegate = NotifyDelegate()
@ -10,6 +12,7 @@ import UIKit
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
UNUserNotificationCenter.current().delegate = notifyDelegate
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}

View File

@ -66,5 +66,10 @@
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>NSUserActivityTypes</key>
<array>
<string>INStartCallIntent</string>
<string>INSendMessageIntent</string>
</array>
</dict>
</plist>

View File

@ -16,17 +16,12 @@ class NotifyDelegate: UIResponder, UNUserNotificationCenterDelegate {
return
}
var token: String = ""
if let tokenJson = UserDefaults.standard.string(forKey: "dyn_user_tk"),
let tokenData = tokenJson.data(using: String.Encoding.utf8),
let tokenDict = try? JSONSerialization.jsonObject(with: tokenData) as? [String: Any],
let tokenValue = tokenDict["token"] as? String {
token = tokenValue
} else {
var token: String? = UserDefaults.standard.getFlutterToken()
if token == nil {
return
}
let serverUrl = "https://nt.solian.app"
let serverUrl = UserDefaults.standard.getServerUrl()
let url = "\(serverUrl)/chat/\(metadata["room_id"] ?? "")/messages"
let parameters: [String: Any?] = [
@ -35,7 +30,7 @@ class NotifyDelegate: UIResponder, UNUserNotificationCenterDelegate {
]
AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: HTTPHeaders(
[HTTPHeader(name: "Authorization", value: "AtField \(token)")]
[HTTPHeader(name: "Authorization", value: "AtField \(token!)")]
))
.validate()
.responseString { response in

View File

@ -0,0 +1,31 @@
//
// DataExchange.swift
// Runner
//
// Created by LittleSheep on 2025/6/2.
//
import Foundation
extension UserDefaults {
func getFlutterValue<T>(forKey key: String) -> T? {
let prefixedKey = "flutter.\(key)"
return self.object(forKey: prefixedKey) as? T
}
func getFlutterToken(forKey key: String = "dyn_user_tk") -> String? {
let prefixedKey = "flutter.\(key)"
guard let jsonString = self.string(forKey: prefixedKey),
let data = jsonString.data(using: .utf8),
let jsonObject = try? JSONSerialization.jsonObject(with: data),
let jsonDict = jsonObject as? [String: Any],
let token = jsonDict["token"] as? String else {
return nil
}
return token
}
func getServerUrl(forKey key: String = "app_server_url") -> String {
return self.getFlutterValue(forKey: key) ?? "https://nt.solian.app"
}
}