Intereting Posts
Вставка в таблицу, соединенная с другой таблицей с помощью справочной таблицы? Обход ошибки Ошибка 413 слишком большая как перебирать свойство JSON, не зная, массив или нет? Ошибка командной строки Codeigniter – PHP Неустранимая ошибка: Class 'CI_Controller' не найден Как создать или изменить класс PHP во время выполнения? Запрещенная ошибка при отправке простой PHP-формы Начало работы с заданиями cron и PHP (Zend Framework) Аутентификация с адресом электронной почты в CakePHP v2.0 Можете ли вы запустить тесты PHPUnit из сценария? ip-адрес cURL отправлять электронную почту с определенного IP-адреса логика для разбивки на страницы, как Google Добавить дни до текущей даты из MySQL с PHP Отправлять уведомление по электронной почте, когда изменения статуса пользовательского заказа в WooCommerce php imagejpeg () Не удается открыть, Нет такого файла или каталога или разрешено отклонение

POST-данные от iOS до php-сервера всегда NULL – iOS 10, Swift 3, php

Я внедряю сервер приложений 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'];