解析REST API:拥有通道名称,我可以在实际发送到Push之前获取设备类型吗?

时间:2015-04-09 11:03:04

标签: php rest parsing push

我们有一台服务器偶尔向我们的用户发送推送。每个用户在Parse中都有自己的频道名称。因为我们的ios和android推送看起来完全不同,我们尝试发送推送两次,一次针对他的频道名称和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,从而只发送一次推送请求而不是两个?

4 个答案:

答案 0 :(得分:4)

Parse有很棒的PHP docs可以帮到这里。由于您在Android中使用自定义推送通知处理程序,因此默认的推送代码可能不适合您。

要注意的一个问题是对" _安装"的解析查询。对象

您的代码将是:

$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,并以此方式进行查询

很高兴解释一下,如果你发表评论,让我知道这种或那种方式。

答案 1 :(得分:1)

我没有使用Parse,我不确定您存储的与用户相关的信息类型。但是,如果您有安装objectId,那么您可以使用它来检索用户的deviceType。

有关详细信息Reference

<强>编辑:

似乎还有另一种方法。

您可Query Installations并传递Query Constraints以获取所需的用户对象。

答案 2 :(得分:0)

从初始请求中,您可以使用MobileESP库从请求中检测设备类型。

答案 3 :(得分:0)

尽量不要两次发送通知。您可以从频道中删除deviceType。

Parse应该注意将通知发送到注册的设备,而不管设备类型,即iPhone或Android。

但是,如果您只需要向一种类型的设备发送通知,请执行以下操作:https://www.parse.com/docs/push_guide#options-platform/PHP