Sto per implementare C2DM per la mia applicazione, ma trovo il documentation un po 'di confusione su come scrivere il manifest.C2DM: come utilizzare l'autorizzazione C2D_MESSAGE?
L'esempio di codice manifesto contiene questo:
<!-- Only this application can receive the messages and registration result -->
<permission android:name="com.example.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="com.example.myapp.permission.C2D_MESSAGE" />
Questo è spiegato come segue:.
applicationPackage +" .permission.C2D_MESSAGE impedisce ad altre applicazioni di registrazione e ricezione di messaggi dell'applicazione
Ma come funziona esattamente? Come ho capito, questo dichiara un permesso e poi ottiene permesso per la mia app. Ma dove è esattamente quel permesso applicato?
Il codice dato per l'iscrizione è:
Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); // boilerplate
registrationIntent.putExtra("sender", emailOfSender);
startService(registrationIntent);
Come può il servizio che riceve il registrationIntent sa cosa il permesso di verificare la presenza di? Come ho capito (e correggermi se ho torto qui), quando dichiaro il permesso, potrei aver scelto qualsiasi nome di permesso all'interno del mio spazio dei nomi, ad es. com.example.myapp.permission.WHATEVER.
Oppure C2D_MESSAGE è una costante di magia che devo usare?
Inoltre, la documentazione dice che devo implementare ricevitori per com.google.android.c2dm.intent.C2D_MESSAGE
e com.google.android.c2dm.intent.REGISTRATION
Intenti. Ma nell'esempio di codice, i filtri del destinatario contengono solo .intent.RECEIVE
e .intent.REGISTRATION
Intenti. Dove è andato C2D_MESSAGE
e ha qualcosa da fare con la mia domanda sopra?
Spero che questo non sia qualcosa di ovvio, ma proprio non capisco ... per favore aiutatemi.
Cosa succede se non dichiaro e richiedo l'autorizzazione C2D_MESSAGE? Non potrò quindi ricevere alcuna trasmissione c2dm? Ciò significherebbe che il commento nel mio primo blocco di codice dovrebbe effettivamente leggere "assicurati di poter ricevere trasmissioni c2dm _at all_" – user634618
Giudicando dalla documentazione, se non dichiari tale autorizzazione, la parte di C2DM che cerca BroadcastRece che può gestire l'intento (e avere il permesso) non troverà nessun BroadcastReceiver da provare, quindi il Broadcast non andrà da nessuna parte. Non l'ho provato, ma sarebbe davvero semplice da provare. Seguirò prima gli esempi dei documenti per essere sicuro che tutto funzioni, innanzitutto. – mbafford
Grazie, ho letto di nuovo la documentazione di BroadcastReceiver e ora la capisco. Quello che non ho notato leggendolo la prima volta è che quando si spara una trasmissione Intent si può richiedere esplicitamente un permesso. – user634618