我们有一台服务器偶尔向我们的用户发送推送。每个用户在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,从而只发送一次推送请求而不是两个?
答案 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