Я PHP разработчик по профессии. Итак, я не очень разбираюсь в мобильных приложениях, iOS, Android и т. Д., Например, в таких вещах. Поэтому, пожалуйста, попытайтесь понять меня.
У меня есть приложение, разработанное с помощью iOS соответствующей командой разработчиков. Теперь я должен предоставить это приложение Всплывающие уведомления с помощью Pushwoosh.
Я понял, что подразумевается под push-уведомлением и использованием Pushwoosh для того же. Кроме того, я могу отправить образец push-уведомления, используя app_id и auth_key, которые я получил от Панель управления Pushwoosh. Когда я запускаю соответствующий PHP-файл с сервера, я получаю «сообщение об успехе» с правильным кодом состояния.
Мой вопрос о том, как на самом деле внедрить эту службу push-уведомлений в приложение с точки зрения сервера?
Теперь для этого давайте рассмотрим более динамичную и практичную вещь.
На самом деле есть одна таблица в базе данных MySQL, которая содержит уведомления. Как только любая новая запись вставляется в эту таблицу, я должен проверить, предназначена ли она (уведомление) для вошедшего в систему пользователя или нет. Если есть или есть какие-либо новые уведомления, созданные для вошедшего в систему пользователя, я должен отправить push-уведомление соответствующему пользователю на его / ее соответствующее устройство через ‘Pushwoosh’.
Теперь мой вопрос: должен ли файл PHP, содержащий код для проверки новых уведомлений и отправки его в виде push-уведомлений, вызываться со стороны приложения, или есть какой-то другой способ?
Другими словами, я сомневаюсь, должна ли эта проверка новых уведомлений выполняться только по запросу, поступающему из приложения?
Я обсуждал ту же проблему с командой разработчиков мобильных приложений, они сказали мне, что мы не отправляем вам никаких запросов, вы просто должны отправить нам push-уведомление. Они сказали мне, что значение push-уведомлений такое же, как то, что приложение никогда не отправляет запрос на сервер, а сам сервер должен отправлять уведомление приложению, когда оно доступно.
Тогда в этом случае как должен выполняться исполняемый файл PHP, содержащий код, поскольку для него не получен запрос?
Другой вопрос здесь: если приложение не собирается отправлять какие-либо запросы в файл PHP, то как мне узнать, какой пользователь вошел в систему и запрашивает новые сгенерированные для него уведомления, если таковые имеются?
Предположим, что если пришел запрос на файл PHP, тогда мне нужно будет выполнить аутентификацию на основе токенов в коде PHP для этого конкретного пользователя, или это будет сделано на стороне приложения, и только после успешной проверки пользователя они отправят запрос в файл PHP. ?
Также следует проверять наличие новых уведомлений через каждые две минуты (опрос). Откуда эта проверка должна быть сделана? Я имею в виду, будет ли PHP-файл получать запросы от приложения каждые две минуты или как?
Пожалуйста, помогите мне решить эти утомительные проблемы.
Благодарю.
Ниже приведен мой пример кода (токен авторизации и идентификатор приложения были изменены в целях безопасности):
<?php
define('PW_AUTH', 'XXXXXXXXXXX');
define('PW_APPLICATION', 'XXXXXXXXXXX');
define('PW_DEBUG', true);
function pwCall($method, $data) {
$url = 'https://cp.pushwoosh.com/json/1.3/' . $method;
$request = json_encode(['request' => $data]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if (defined('PW_DEBUG') && PW_DEBUG) {
print "[PW] request: $request\n";
print "[PW] response: $response\n";
print "[PW] info: " . print_r($info, true);
}
}
pwCall('createMessage', array(
'application' => PW_APPLICATION,
'auth' => PW_AUTH,
'notifications' => array(
array(
'send_date' => 'now',
'content' => 'test',
'data' => array('custom' => 'json data'),
'link' => 'http://pushwoosh.com/'
)
)
)
);
?>
Только в приведенном выше коде я собираюсь интегрировать код для проверки и отправки новых уведомлений, если они доступны.
Начнем с установки приложения для iOS. Команда iOS должна позаботиться о регистрации устройства после установки на Apple Push Notification Server (APNS) и получения push-токена.
При входе в систему они должны отправить этот push-токен на сервер PHP, а сервер должен позаботиться о том, чтобы сохранить его вместе с данными пользователя. Обычно (но не обязательно) после успешного входа в систему сервер должен сгенерировать какой-то уникальный токен и отправить его обратно на устройство, которое впоследствии будет использоваться для связи между ними. Если нет никаких требований по истечении срока действия, этот токен достаточно хорош, чтобы знать, что пользователь вошел в систему.
Если истекает срок действия, то сервер должен сохранить временную отметку момента, когда генерируется токен, и сохранить его в БД. Это также требует обновления отметки времени всякий раз, когда пользователь взаимодействует с приложением / сервером.
Задание cron можно запускать каждые 2 минуты, что вызовет скрипт PHP. Этот PHP-скрипт просматривает таблицу в БД и проверяет наличие новых уведомлений, и, если обнаружит такие, следует попытаться отправить push-уведомление. Если требуется проверка «залогинен», скрипт должен проверить токен пользователя и при успешном завершении должен отправить /createMessage
Запрос API к Pushwoosh с соответствующим push-токеном устройства. Параметр в запросе JSON должен выглядеть примерно так:
"devices":["dec301908b9ba8df85e57a58e40f96f523f4c2068674f5fe2ba25cdc250a2a41"]
Обратите внимание, что вы можете добавить сюда до 1000 push-токенов.
Таким образом, вы отправите push-уведомление на конкретное устройство пользователя.
Обратите внимание, что один пользователь может установить приложение на нескольких устройствах. В этом случае все push-токены должны храниться и использоваться при отправке push-уведомления.
Надеюсь, я что-то не пропустил.
Push-уведомления часто используются для привлечения пользователей в приложение, когда они не вошли в систему некоторое время или когда происходит какое-либо событие или продвижение. Из-за этого большинство реализаций push-уведомлений не могут полагаться на запрос самого приложения.
В этом случае новая запись в базе данных MySQL является условием для отправки push-уведомления, поэтому я бы создал файл PHP, который будет запускаться по регулярному расписанию для проверки новых, неотправленных строк в базе данных MySQL. Лучший способ запрашивать PHP-скрипты по расписанию — это настроить на вашем сервере задание cron, которое будет запускаться каждые две минуты. В Интернете есть много информации о настройке заданий cron, и большинство команд ops могут сделать это за вас. Но если вам нужно / хотите настроить его самостоятельно, основными шагами являются:
crontab -e
отредактировать файл конфигурации cronДобавьте команду cron. Хотелось бы что-то вроде этого:
*/2 * * * * cd /absolute/script/path && php script_name.php
*/2
означает, что он будет запускаться каждые 2 минуты, остальные *
символы означают, что скрипт будет запускаться каждый час, день, месяц и день недели. Наконец, команда командной строки для выполнения. Изменение каталогов перед запуском файла PHP даст вам то же поведение в текущем рабочем каталоге, что и при запросе файла PHP с веб-сервера.
Есть несколько способов определить, вошли ли пользователи в систему. Один из них, я бы предложил, иметь поле в БД, которое будет обновлено с указанием статуса входа и времени последнего действия, которое пользователь совершил при входе в систему. Время последнего действие полезно, поскольку пользователи часто не выходят из приложений, а просто закрывают их. Вы можете использовать время с момента их последнего действия, чтобы узнать, достаточно ли долго приложение неактивно, чтобы предположить, что пользователь его больше не использует. Это зарегистрированное поле также может быть сохранено на уровне кэширования, если ваше приложение использует его для уменьшения нагрузки на БД.
С точки зрения аутентификации токена, это должно исходить от приложения. Устройства iOS требуют, чтобы пользователь дал разрешение приложению до того, как токен push-уведомления будет создан и отправлен в само приложение. Это то, о чем должна была позаботиться команда разработчиков приложений, и они должны быть в состоянии предоставить вам место, где хранятся эти токены, или, по крайней мере, помочь вам создать решение для хранения токенов. Если вы храните токен push-уведомлений и связанный идентификатор пользователя в БД MySQL, это должен быть простой поиск для доступа к их токену аутентификации.
Чтобы суммировать вышеупомянутую информацию, я бы создал решение, подобное следующему: