Estoy a punto de implementar C2DM para mi aplicación, pero creo que el documentation es un poco confuso con respecto a cómo escribir el manifiesto.C2DM: cómo usar el permiso C2D_MESSAGE?
El ejemplo de código manifiesto contiene esto:
<!-- 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" />
Esto se explica de la siguiente manera:.
applicationPackage +" .permission.C2D_MESSAGE impide que otras aplicaciones de registro y recepción de mensajes de la aplicación
Pero, ¿cómo funciona esto exactamente? Según tengo entendido, esto declara un permiso y luego lo obtiene permiso para mi aplicación Pero, ¿dónde exactamente se aplica ese permiso?
El código dado para la inscripción es:
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);
¿Cómo puede el servicio que recibe el registrationIntent sabe lo que el permiso para comprobar si hay? Como entiendo (y me corrigen si estoy equivocado aquí), al declarar el permiso, pude haber elegido cualquier nombre de permiso dentro de mi espacio de nombres, p. com.example.myapp.permission.WHATEVER.
¿O es C2D_MESSAGE alguna constante mágica que tengo que usar?
Además, la documentación dice que tengo que poner en práctica los receptores de com.google.android.c2dm.intent.C2D_MESSAGE
y com.google.android.c2dm.intent.REGISTRATION
Intentos. Pero en el ejemplo del código, los filtros del receptor solo contienen .intent.RECEIVE
y .intent.REGISTRATION
Intents. ¿A dónde se dirigió C2D_MESSAGE
, y tiene algo que hacer con mi la pregunta anterior?
Espero que esto no sea algo obvio, pero simplemente no lo entiendo ... por favor ayuda.
Entonces, ¿qué sucede si no declaro y necesito el permiso C2D_MESSAGE? ¿No podré recibir transmisiones de c2dm? Esto significaría que el comentario en mi primer bloque de código debería decir "asegúrese de que podamos recibir transmisiones de c2dm _at all_" – user634618
A juzgar por la documentación, si no declara ese permiso, entonces la parte de C2DM que busca BroadcastReceivers que pueda manejar el intento (y tener el permiso) no encontrará ningún BroadcastReceivers para probar, por lo que la transmisión no irá a ninguna parte. No lo he intentado, pero sería muy fácil de probar. Antes, seguiría los ejemplos de los documentos para asegurarme de que todo está funcionando. – mbafford
Gracias, leí la documentación de BroadcastReceiver nuevamente y ahora lo entiendo. Lo que no noté cuando lo leí la primera vez es que al activar un Intento de transmisión, se puede requerir explícitamente un permiso. – user634618