Android GCM: регистрация и получение сообщений приложения Android из другого приложения

Я читаю документы Android для Android GCM по адресу https://developers.google.com/cloud-messaging/android/client

Затем я заметил часть ниже:

Ваше разрешение + «.permission.C2D_MESSAGE» для предотвращения регистрации других приложений Android и получения сообщений приложения Android. Имя разрешения должно точно соответствовать этому шаблону, иначе приложение Android не будет получать сообщения.

Пример кода:

<permission android:name="<your-package-name>.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
    <uses-permission android:name="<your-package-name>.permission.C2D_MESSAGE" />

Приведенный выше код, похоже, объявляет пользовательское разрешение, а затем использует его. Верно?

Теперь у меня два вопроса по этому поводу:

  • Во-первых, как упоминалось в документе, «чтобы другие приложения Android не регистрировались и не получали сообщения приложения Android», это означает, что мы можем каким-то образом зарегистрироваться и получать сообщения от другого приложения. Мы можем? как мы можем сделать это?

  • Последнее, я не очень понимаю, как это работает? Я имею в виду приведенный выше пример кода.

Не могли бы вы помочь!? (Ах, я вижу здесь тот же вопрос Как работает разрешение android.C2D_MESSAGE, чтобы другие люди не имитировали мой клиент - но это вопрос 1-летней давности, и до сих пор ничего не обновлялось, так что надеемся, что у нас есть какое-то обновление)


person Lạng Hoàng    schedule 02.12.2015    source источник
comment
Это поможет вам. javapapers.com /андроид/   -  person Pratik Butani    schedule 02.12.2015


Ответы (1)


Этот ответ является обоснованным предположением. Я думаю, что авторитетный ответ может исходить только от инсайдера Google, имеющего доступ к коду.

Важным аспектом com.your.pkg.permission.C2D_MESSAGE, который должно декларировать клиентское приложение GCM, является то, что его уровень защиты — подпись. В документации поясняется, что разрешение на уровне подписи:

Разрешение, которое система предоставляет, только если запрашивающее приложение подписано тем же сертификатом, что и приложение, объявившее разрешение.

Это означает, что система никогда не предоставит объявленное вами разрешение C2D_MESSAGE любому приложению, которое не подписано вами.

Когда платформа GCM получает нисходящее сообщение, она знает имя пакета приложения, которому должно быть доставлено сообщение. Я не знаю, как фреймворк получает эту информацию. Возможно, он включен в метаданные сообщения. Когда вы создаете учетные данные для своего клиентского приложения GCM в Google Developers Console, вы указываете имя пакета. Результатом является ассоциация (ключ API, идентификатор отправителя, имя пакета и отпечаток пальца SHA-1). Вполне вероятно, что сервер GCM использует эти данные для включения имени целевого пакета в метаданные сообщения.

Используя имя пакета, платформа GCM может создать полную строку разрешений C2D_MESSAGE и использовать Context.sendBroadcast(), который включает разрешение. Затем трансляция будет доставляться только экземплярам GcmReceiver, у которых есть это разрешение, которое в данном случае есть в вашем приложении и только оно.

person Bob Snyder    schedule 02.12.2015