Я собираюсь реализовать C2DM для своего приложения, но я нахожу документацию немного запутанной относительно того, как писать манифест.
Пример кода манифеста содержит следующее:
<!-- 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" />
Это объясняется следующим образом:
applicationPackage + ".permission.C2D_MESSAGE запрещает другим приложениям регистрировать и получать сообщения приложения.
Но как именно это работает? Насколько я понимаю, это объявляет разрешение, а затем получает это разрешение для моего приложения. Но где именно это принудительное исполнение?
Код для регистрации:
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);
Как служба, которая получает регистрационную информацию, знает, какое разрешение для проверки? Поскольку я понимаю (и исправляю, если я ошибаюсь здесь), когда я объявляю о разрешении, я мог бы выбрать любое имя разрешения в моем пространстве имен, например. com.example.myapp.permission.WHATEVER.
Или есть C2D_MESSAGE некоторая магическая константа, которую я должен использовать?
Кроме того, в документации говорится, что мне нужно реализовать приемники для com.google.android.c2dm.intent.C2D_MESSAGE
и com.google.android.c2dm.intent.REGISTRATION
Intents. Но в примере кода фильтры-приемники содержат только .intent.RECEIVE
и .intent.REGISTRATION
Intents. Куда пошел C2D_MESSAGE
, и есть ли у него что-то с моим вопросом выше?
Надеюсь, это не что-то очевидное, но я просто не понимаю... пожалуйста, помогите.