Parse REST API: имея имя канала, могу ли я получить тип устройства до фактической отправки Push?
У нас есть сервер, который иногда посылает нажатия нашим пользователям. У каждого пользователя есть свое имя канала в Parse. Поскольку наши iOS и android push выглядят совершенно по-другому, мы пытаемся отправить push два раза, один раз нацеливая его имя канала и Android-устройства и один раз нацеливая его имя канала и устройства ios:
$aAndroidPush = array(
"where" => array(
"deviceType" => "Android",
"channels" => array('$in' => array("push_user"))
),
"data" => array(
"action" => "com.android.action",
"alertMessage" => "this is a push",
"t" => "web",
"m" => 0
)
);
$aIOSPush = array(
"where" => array(
"deviceType" => "ios",
"channels" => array('$in' => array("push_user"))
),
"data" => array(
"alert" => "this is a push",
"sound" => "p.mp3",
"t" => "web",
"m" => 0 ,
"badge" => ""
)
);
$aHeaders = array(
"Content-Type: application/json",
"X-Parse-Application-Id: parse_app_id" .,
"X-Parse-REST-API-Key: parse_rest_key" .
);
$oRest = curl_init();
curl_setopt($oRest,CURLOPT_HTTPHEADER,$aHeaders);
curl_setopt($oRest,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($oRest,CURLOPT_RETURNTRANSFER, true);
curl_setopt($oRest,CURLOPT_URL,"https://api.parse.com/1/push");
curl_setopt($oRest, CURLOPT_POST, 1);
curl_setopt($oRest, CURLOPT_POSTFIELDS, json_encode($aIOSPush));
curl_exec($oRest);
curl_setopt($oRest, CURLOPT_POSTFIELDS, json_encode($aAndroidPush));
curl_exec($oRest);
Итак, мой вопрос заключается в том, есть ли способ сделать запрос в parse (REST API или новый PHP API) перед отправкой томов, чтобы узнать, использует ли канал назначения или Android или ios и, таким образом, отправляет только один push запрос, а не два?
Ответы
Ответ 1
Parse имеет отличный PHP docs, который может помочь здесь. Поскольку вы используете специальный обработчик уведомлений push в Android, код Push по умолчанию вряд ли будет работать для вас.
Одна из вещей, на которые нужно обратить внимание, - это запрос Parse к объекту "_Installation".
Ваш код будет выглядеть следующим образом:
$query = new ParseQuery("_Installation"); // or try ParseInstallation()?
$query->equalTo("objectId", $yourObjectId);
$result = $query->first();
if ($result->get("deviceType") == "android") {
// we are Android
} else {
// we are iOS
}
Это поможет узнать, какие другие данные у вас есть на установке до нажатия. Если у вас есть objectId
, это заставляет этот код работать. Если у вас есть массив channels
, вам нужно будет выбрать пользователей в этих каналах, а затем foreach
по массиву, захватить objectId
и сделать запрос таким образом.
Счастлив объяснить, оставляете ли вы комментарий, давая мне знать, так или иначе.
Ответ 2
Я не использовал Parse, и я не уверен, какую информацию вы сохранили в отношении пользователя. Но, похоже, если у вас есть объект установки, тогда вы можете использовать его для извлечения типа устройства пользователя.
Подробнее Ссылка
Отредактировано:
Кажется, есть еще один способ сделать это.
Вы можете "Установки запросов" и передать Query Constraints в получить желаемый объект пользователя в ответ.
Ответ 3
Из первоначального запроса вы можете определить тип устройства из запроса с помощью MobileESP.
Ответ 4
Старайтесь не отправлять уведомления дважды. Вы можете удалить DeviceType из канала.
Parse должен позаботиться о отправке уведомлений зарегистрированному устройству, независимо от типа устройства, то есть iPhone или Android.
Но если вам абсолютно необходимо отправить уведомление только на один тип устройств, вот как это сделать: https://www.parse.com/docs/push_guide#options-platform/PHP