У нас есть сервер, который иногда отправляет сообщения нашим пользователям. У каждого пользователя есть собственное название канала в 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);
Поэтому мой вопрос заключается в том, существует ли способ сделать запрос в разобранном виде (REST API или новый PHP API) перед отправкой запросов, чтобы узнать, использует ли целевой канал либо Android, либо IOS и, таким образом, отправлять только один push-запрос, а не два?
Парс имеет отличный PHP документы это может помочь здесь. Поскольку вы используете собственный обработчик push-уведомлений в Android, код Push по умолчанию вряд ли подойдет вам.
Одна из вещей, на которую стоит обратить внимание, — это Parse Query для объекта «_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
и сделайте запрос таким образом.
Рад объяснить, если вы оставите комментарий, дающий мне знать, так или иначе.
Я не использовал Parse, и я не уверен, какую информацию вы сохранили, связанную с пользователем. Но похоже, что если у вас есть установочный objectId, вы можете использовать его для извлечения deviceType пользователя.
Больше подробностей Ссылка
Отредактировано:
Похоже, есть еще один способ сделать это.
Вы можете Установка запросов и передать Ограничения запросаполучить желаемый пользовательский объект взамен.
Из первоначального запроса вы можете определить тип устройства по запросу, используя MobileESP библиотека.
Постарайтесь не отправлять уведомления дважды. Вы можете удалить deviceType из канала.
Parse должен позаботиться об отправке уведомлений на зарегистрированное устройство, независимо от типа устройства, то есть iPhone или Android.
Но если вам абсолютно необходимо отправить уведомление только на один тип устройств, вот как: https://www.parse.com/docs/push_guide#options-platform/PHP