Я внедряю сервер приложений FCM и хочу сохранить идентификатор токена регистрации устройства в моей собственной базе данных (Server, написанной на PHP).
Я понимаю, что данные в токере идентификатора устройства всегда равны нулю. Может ли кто-то указать правильный способ хранения маркера соответствующим образом в базе данных?
Действительно оценил, возможно, кто-то может помочь мне в этом вопросе, спасибо!
Не забудьте указать код / скриншоты ниже: –
AppDelegate.swift
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { var token = "" for i in 0..<deviceToken.count { token += String(format: "%02.2hhx", arguments: [deviceToken[i]]) } print("Registration succeeded!") print("Token: ", token) Callquery(token) }
AppDelegate.swift (метод Callquery, который отправляет запрос POST на серверный скрипт)
func Callquery(_ token: String) { // append parameter to oneDictionary let tokenString = ["token": token] as [String: Any] // create the request var request = URLRequest(url: URL(string:"https://YourURL.com/admin/registerToken.php")!) // set the method as POST request.httpMethod = "POST" // append the paramter to body request.httpBody = try! JSONSerialization.data(withJSONObject: tokenString, options: []) // create the session URLSession.shared.dataTask(with:request, completionHandler: {(data, response, error) in if error != nil { print("There was error during datatask session") print(error) } else { do { guard let json = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any] else { return } guard let errors = json?["errors"] as? [[String: Any]] else { return } if errors.count > 0 { // show error print("There is an error during parse JSON datatask") return } else { // show confirmation print("datatask with JSON format performed successfully") } } } print(request) }).resume() }
Сценарий служебной стороны (registerToken.php):
<?php include 'config.php'; $token = $_POST['token']; $sql = "INSERT INTO users (email,device_id) VALUES ('email','$token')"; mysqli_query($conn, $sql); mysqli_close($conn); ?>
Запуск приложения с реальными журналами устройств, как показано ниже:
Таблица пользователей базы данных (идентификатор устройства всегда ничего не имеет): –
структура таблицы пользователей: –
tokenString: –
Я решил эту проблему, используя метод GET вместо метода POST, как показано ниже:
Appdelegate.swift:
var request = URLRequest(url: URL(string:"https://YourURL.com/admin/registerToken.php?token=\(token)")!)
Сценарий на стороне сервера:
$token = $_GET['token'];