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