2015-04-09 7 views
11

Wir haben einen Server, der gelegentlich Pushs an unsere Benutzer sendet. Jeder Benutzer hat seinen eigenen Kanalnamen in Parse. Weil unsere iOS- und Android-Schübe ganz anders aussehen, versuchen wir, die Push zwei Mal zu senden, einmal seine Kanalnamen und Android-Geräte und einer Zeit Targeting seine Kanalnamen und ios Geräte Targeting:REST-API analysieren: Kann ich den Gerätetyp vor dem Senden an Push mit dem Kanalnamen abfragen?

$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); 

Also meine Frage ist Gibt es eine Möglichkeit, eine Anfrage in parse (REST API oder die neue PHP API) vor dem Senden der Pushs, um zu sehen, ob der Targeting-Kanal entweder Android oder iOS verwendet und damit nur eine Push-Anfrage und nicht zwei senden?

+0

Gemäß [this] (https://parse.com/docs/push_guide#options-platform/REST) ​​gilt die REST-API standardmäßig für beide. Haben Sie versucht, den Gerätetyp zu entfernen und das Push-Array zu standardisieren? Z.B. Verwenden Sie den Schnittpunkt des Push-Arrays. – Chad

+0

Wie gesagt, es ist nicht möglich, weil der Push ganz anders aussieht.Wenn ich zum Beispiel das Alert-Schlüsselwort für Android verwende, wird der Standard-ParseBroadcastReceiver anstelle meines benutzerdefinierten ausgelöst, also muss ich alertMessage verwenden. Ich kann alertMessage nicht für iOS verwenden, da iOS nur auf Warnungen wartet. –

+0

@PetrosMastrantonas - Wenn Sie das Problem gelöst haben und eine der Antworten auf Ihre Frage hilfreich war, markieren Sie diese Antwort als akzeptiert, um zukünftigen Besuchern von SO zu helfen, das Problem zu lösen. Vielen Dank! –

Antwort

0

Bei der ersten Anfrage können Sie den Gerätetyp von der Anfrage mit der Bibliothek MobileESP erkennen.

+1

Wie verbindet sich diese Bibliothek mit der Parse-Datenbank? –

0

Versuchen Sie, Ihre Benachrichtigungen nicht zweimal zu senden. Sie können deviceType aus dem Kanal entfernen.

Parse sollte sich darum kümmern, die Benachrichtigungen an das registrierte Gerät zu senden, unabhängig vom Gerätetyp, z. B. iPhone oder Android.

Aber wenn Sie unbedingt Benachrichtigung nur eine Art von Geräten senden müssen hier, wie: https://www.parse.com/docs/push_guide#options-platform/PHP

+1

Wie bereits erwähnt, ist es nicht möglich, deviceType zu entfernen, da der Push ganz anders aussieht. Wenn ich zum Beispiel das Alert-Schlüsselwort für Android verwende, wird der Standard-ParseBroadcastReceiver anstelle meines benutzerdefinierten ausgelöst, also muss ich alertMessage verwenden. Ich kann alertMessage nicht für iOS verwenden, da iOS nur auf Warnungen wartet. Ich sende bereits Benachrichtigungen an Android und iOS, aber ich möchte es wissen, bevor ich eine Nachricht senden, welches Gerät ich anvisiere. Ihr Rat ist derselbe wie die REST-API, nur mit PHP-Code. –

1

Ich habe Parse nicht verwendet und ich bin nicht sicher, welche Art von Informationen, die Sie gespeichert haben, den Benutzer verwendet. Aber wenn Sie die Installations-Objekt-ID haben, können Sie damit den Gerätetyp des Benutzers abrufen.

Weitere Details Reference

Editiert:

Scheint, als ob es noch eine andere Möglichkeit, es zu tun.

Sie können Query Installations und übergeben Query Constraints, um das gewünschte Benutzerobjekt im Gegenzug zu erhalten.

4

Parse hat große PHP docs, die hier helfen kann. Da Sie in Android einen benutzerdefinierten Push-Benachrichtigungshandler verwenden, funktioniert der Standard-Push-Code wahrscheinlich nicht für Sie.

Eines der Dinge zu betrachten ist die Parse-Abfrage für das "_Installation" -Objekt.

Code wäre:

$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 
} 

Es würde helfen, zu wissen, welche anderen Daten, die Sie auf der Installations vor dem Stoß haben. Wenn Sie objectId haben, funktioniert dieser Code. Wenn Sie ein Array von channels haben, müssen Sie Benutzer in diesen Kanälen auswählen und dann foreach über das Array, greifen Sie die objectId, und machen Sie eine Abfrage auf diese Weise.

Gerne zu erklären, wenn Sie einen Kommentar lassen mich auf die eine oder andere Weise wissen lassen.

Verwandte Themen