2016-03-23 39 views
5

Próbuję obudzić telefon lub zapalić lampkę za pomocą GCM. Otrzymuję wiadomości w porządku, ale nie ma różnicy w ustawianiu wysokiego priorytetu lub wcale. Używam testera razr maxx hd. czy jest tu coś, czego mi tu brakuje?Android - wiadomości o wysokim priorytecie z Google Cloud Messaging (za pomocą Corona SDK)

<?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

Czy tworzenie obiektu JSON w PHP jest zwykle podobne do tworzenia tablicy? Zawartość tablicy '$ fields' wygląda dobrze, jest tylko wskazana w [documentation] (https://developers.google.com/cloud-messaging/http-server-ref#send-downstream), która powinna być JSON . [Ustawienie priorytetu] (https://developers.google.com/cloud-messaging/concept-options#setting-the-priority-of-a-message) na 'high' powinno obudzić urządzenie do spania. Upewnij się, że GCM dostarcza wiadomość od razu: – adjuremods

+0

nagłówki to "application/json", które zakodują je jako json. Robię tę aplikację za pomocą SDK Corona, więc cały normalny kod java, który uruchamiasz w natywnej aplikacji na Androida, jest dla mnie niedostępny. nie jestem pewien, czy muszę uruchomić kod powiadomień w samej aplikacji, aby to osiągnąć .. – hamobi

Odpowiedz

3

Od dwóch poniższych linków

GCM Priority

Optimizing for Doze and App Standby

można wywnioskować, że dla wiadomości o wysokim priorytecie

GCM próbuje natychmiast dostarczyć wysokie wiadomości priorytetowych, dzięki czemu the G Usługa CM, aby obudzić urządzenie sypialne, gdy jest to możliwe i otworzyć połączenie sieciowe z serwerem aplikacji.

i dla normalnej wiadomości

Normalne wiadomości priorytecie nie będą otwarte połączenia sieciowe na śpiącego urządzenia, a ich dostawa może być opóźniona, aby oszczędzać baterię.

i jak widać z odpowiedzi na kolejny question

nigdy nie można być pewnym, że urządzenie z Androidem jest w trybie uśpienia dla wersji Android mniej niż Marshmallow, dla urządzeń z systemem Marshmallow lub wyższy jest tryb drzemać .

Więc uzyskać urządzenie działa Marshmallow lub większą i umieścić go w tryb dawki uruchamiając następujące polecenia

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

Być może trzeba uruchomić drugi komenda więcej niż raz. Powtarzaj tę czynność, dopóki stan urządzenia nie zmieni się na bezczynny.

Teraz spróbuj wysłać powiadomienie push z wysokim priorytetem i normalnym priorytetem. Gdy priorytet wiadomości jest wysoki, powiadomienie powinno zostać odebrane i podobnie, gdy żaden priorytet nie jest ustawiony lub ustawiony na normalny, powiadomienie zostanie dostarczone z pewnym opóźnieniem lub po obudzeniu urządzenia.

+0

dzięki za odpowiedź, ale jak powiedziałem, używam razr maxx hd. moja firma nie dostarcza mi żadnych urządzeń z Androidem do testowania ... używając starego :(myślę, że to android 4.4.2 – hamobi

+0

Możesz użyć emulatora z obrazem Google Api do celów testowych –