2016-03-23 21 views
5

Sto provando a svegliare il mio telefono o a far lampeggiare la luce utilizzando GCM. Sto ricevendo i messaggi bene, ma non c'è differenza nell'impostazione di una priorità alta o del tutto assente. Sto usando un razr maxx hd per testare. c'è qualcosa che mi manca qui?Android - messaggi ad alta priorità con google cloud messaging (utilizzando sdk corona)

<?php 
// API access key from Google API's Console 
define('API_ACCESS_KEY', 'blee'); 

// prep the bundle 
$msg = array 
(
    'body' => 'this is my nice body', 
    'sound' => 'misc/androidnotification.mp3', 

    'custom' => array(
     'route' => '/beee' 
    ) 
); 
$fields = array 
(
    'collapse_key' => 'test', 
    "time_to_live" => 0, 
    'priority' => 'high', 
    'to' => 'mykey',  
    'data'   => $msg, 

); 

$headers = array 
(
    'Authorization: key=' . API_ACCESS_KEY, 
    'Content-Type: application/json' 
); 

$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send'); 
curl_setopt($ch,CURLOPT_POST, true); 
curl_setopt($ch,CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch,CURLOPT_POSTFIELDS, json_encode($fields)); 
$result = curl_exec($ch); 
curl_close($ch); 
echo $result; 
+0

La creazione di un oggetto JSON in PHP è in genere simile alla creazione di un array? Il contenuto dell'array '$ fields' sembra buono, è appena indicato nella [documentazione] (https://developers.google.com/cloud-messaging/http-server-ref#send-downstream) che dovrebbe essere JSON . [Impostazione prioritaria] (https://developers.google.com/cloud-messaging/concept-options#setting-the-priority-of-a-message) a 'high' dovrebbe svegliare un dispositivo dormiente. Assicurati che GCM invii subito il messaggio – adjuremods

+0

le intestazioni siano "application/json" che lo codificheranno come json. Sto realizzando questa app utilizzando corona SDK, quindi per me non è disponibile tutto il normale codice Java che avresti eseguito in un'app Android nativa. non sono sicuro se ho bisogno di eseguire qualche codice di notifica all'interno della stessa app per realizzare questo .. – hamobi

risposta

3

Dai seguenti due link

GCM Priority

Optimizing for Doze and App Standby

si può dedurre che per il messaggio di alta priorità

GCM tentare di inviare immediatamente i messaggi ad alta priorità, permettendo il G Servizio CM per riattivare un dispositivo letto quando possibile e aprire una connessione di rete al server dell'app.

e per il messaggio normale

messaggi con priorità normale non le connessioni di rete aperte su un dispositivo a pelo , e la loro consegna può essere ritardata per risparmiare batteria.

e, come si può vedere dalla risposta per le seguenti question

non si può mai essere sicuri che il dispositivo Android è in modalità sleep per la versione Android meno di Marshmallow, per i dispositivi che eseguono Marshmallow o superiore v'è la modalità doze .

Quindi ottenere un dispositivo che esegue Marshmallow o superiore e metterlo in modalità di dosare eseguendo i seguenti comandi

$ adb shell dumpsys battery unplug 
$ adb shell dumpsys deviceidle step 

Potrebbe essere necessario eseguire il secondo comando più di una volta. Ripeti fino a quando lo stato del dispositivo diventa inattivo.

Ora prova a inviare la notifica push con priorità alta e priorità normale. Quando la priorità del messaggio è elevata, la notifica deve essere ricevuta e, allo stesso modo, quando non viene impostata alcuna priorità o impostata come normale, la notifica verrà recapitata con un certo ritardo o quando si riattiva il dispositivo.

+0

grazie per la risposta, ma come ho detto sto usando un maxx hd razr. la mia azienda non mi fornisce alcun dispositivo Android per testare su .. utilizzando uno vecchio :(penso che sia Android 4.4.2 – hamobi

+0

È possibile utilizzare l'emulatore con l'immagine di Google Api a scopo di test –