C2DM: ¿Cómo utilizar el permiso de C2D_MESSAGE?

Estoy a punto de implementar C2DM para mi aplicación, pero encuentro la documentación un poco confusa con respecto a cómo escribir el manifiesto.

El ejemplo de código de manifiesto contiene lo siguiente:

<!-- 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 registren y reciban los mensajes de la aplicación.

Pero, ¿cómo exactamente funciona esto? Según entiendo, esto declara un permiso y luego obtiene ese permiso para mi aplicación. Pero, ¿dónde se aplica exactamente ese permiso?

El código dado para el registro 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 saber qué permiso pedir? Según entiendo (y corregirme si estoy equivocado aquí), al declarar el permiso, podría haber elegido cualquier nombre de permiso dentro de mi espacio de nombres, por ejemplo, com.example.myapp.permission.WHATEVER.

¿O C2D_MESSAGE es una constante mágica que tengo que usar?


Además, la documentación dice que tengo que implementar receptores para com.google.android.c2dm.intent.C2D_MESSAGE y com.google.android.c2dm.intent.REGISTRATION Intents. Pero en el ejemplo de código, los filtros del receptor sólo contienen .intent.RECEIVE y .intent.REGISTRATION Intents. ¿Dónde C2D_MESSAGE ir, y tiene algo hacer con mi la pregunta anterior?

Espero que esto no sea algo obvio, pero simplemente no lo entiendo … por favor ayuda.

One Solution collect form web for “C2DM: ¿Cómo utilizar el permiso de C2D_MESSAGE?”

Los receptores que dicen que necesita en la parte superior del resumen parece ser un error en la documentación, ya que no coincide con el ejemplo manifiesto.

"Receptores para com.google.android.c2dm.intent.C2D_MESSAGE y com.google.android.c2dm.intent.REGISTRATION.")

Conseguí los ejemplos que dan para trabajar usando simplemente las entradas manifestadas del ejemplo tweaked para emparejar el nombre del paquete de mi aplicación particular.

Cuando el código C2DM en Android envía la emisión (o mejor dicho, cuando busca receptores potenciales para enviar la emisión a), busca:

Encuentra los receptores de difusión para Intent: com.google.android.c2dm.intent.REGISTRATION Que tienen permiso: .permission.C2D_MESSAGE

Todos los mensajes C2DM enviados a su aplicación por el código Android C2DM estarán buscando ese permiso en particular. Es específico para su aplicación, y simplemente necesita estar en esa estructura (el paquete de su aplicación + ".permission.C2D_MESSAGE").

En cuanto a la forma en que la solicitud de registro obtiene el nombre del paquete que se utiliza para los permisos, que se maneja cuando se registra por primera vez con la "aplicación" extra – de la documentación:

"App es el ID de la aplicación, establecido con un PendingIntent para permitir que el servicio de registro extraiga la información de la aplicación."

La línea en cuestión:

 registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); // boilerplate 
  • Notificación Push de Android C2DM
  • Agente MDM en iOS
  • Uso de permisos que android 2.1 no sabe (en android 2.1)
  • ¿Cuál es la forma correcta de iniciar una comunicación de red basada en recibir una intención de difusión?
  • notificaciones push de Google Chrome android
  • Alerta de visualización cuando llega el empuje
  • Notificaciones push / C2DM para Kindle Fire?
  • ¿Cómo funciona el servicio de mensajería de Google Cloud en Android?
  • Android c2dm automáticamente no registrado
  • devolución de llamada de intención de difusión: result = CANCELED forIntent
  • Recepción de notificaciones de GCM de Android cuando la aplicación está en estado detenido
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.