2012-07-31 19 views
12

Sviluppo di un'applicazione GCM. Tutto funziona correttamente quando il dispositivo non è inattivo (ad esempio, si dorme premendo il pulsante di accensione). Tuttavia, quando invio il messaggio quando il dispositivo è inattivo, il dispositivo non si riattiva.GCM non sveglia il dispositivo

ho fatto le seguenti:

  1. verificato che delay_while_idle non è impostata su true in app server di
  2. usato una chiave di compressione diverso per ogni messaggio
  3. riavviato il dispositivo più volte
  4. Ho cercato di omettere il delay_while_idle completamente dal lato server - non ha effetto

I obiettivo Android 2.2 api livello 8 (versione più bassa), test su un dispositivo attuale con Android 2.3.6

Il dispositivo utilizza il wi-fi, non esiste una scheda SIM, ma riceve messaggi corretti mentre è in esecuzione e non inattivo.

Questo è il cliente manifesta sezione permesso:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<permission 
    android:name="com.tranwall.sdk.device.android.permission.C2D_MESSAGE" 
android:protectionLevel="signature" /> 
<uses-permission android:name="basePackage.android.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />   
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

Grazie in anticipo per qualsiasi aiuto

risposta

4

problema all'interno di file manifesto only.Make che il seguente è il contenuto del file manifesto MCG

<permission 
    android:name="packagename.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="packagename.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

<application> 
    <receiver 
     android:name="com.google.android.gcm.GCMBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
      <category android:name="packagename" /> 
     </intent-filter> 
    </receiver> 
    <service android:name=".GCMIntentService" android:enabled="true" /> 
</application> 
+0

Ciao koti, ho il setup simile per il ricevitore broadcast e il servizio intent: ho solo postato la sezione permessi del mio manifest. L'app client funziona perfettamente quando il dispositivo non è inattivo. Posso vedere dal registro che anche quando è inattivo il messaggio è stato ricevuto - l'unico problema è il fatto che il messaggio push in arrivo non riattiva il dispositivo – Will777

+0

Quindi in modalità di inattività anche il messaggio indica che sta chiamando il metodo MessageMessage() di servizio in là è possibile scrivere qualche codice di veglia che è in questo post http://stackoverflow.com/questions/5215367/android-how-can-i-wake-up-the-phone-from-a-hard-sleep- to-take-a-picture – koti

+0

Grazie, ho intenzione di provare a farlo - Ho avuto l'impressione che le librerie client GCM si riattivano il dispositivo quando arriva il messaggio – Will777

4

delayWhileIdle=false

delay_while_idle: se incluso, indica che il messaggio non deve essere inviato immediatamente se il dispositivo è inattivo.
Il server attenderà che il dispositivo diventi attivo, quindi verrà inviato solo l'ultimo messaggio per ciascun valore * collapse_key *. Opzionale. Il valore predefinito è false e deve essere un valore booleano JSON.

2

Il lato server richiede questo codice;

builder.delayWhileIdle(false); 

significa che nessun telefono sveglia su un sonno profondo. ma ha ricevuto un messaggio.

quindi quando sveglia telefono utente, ha generato nuovi intenti per GCMIntentService.