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 permission.C2D_MESSAGE, за да предотврати други хора да имитират моя клиент - но въпросът е отпреди 1 година и нищо не се актуализира досега, така че се надявам, че имаме някаква актуализация)


person Lạng Hoàng    schedule 02.12.2015    source източник
comment
Това ще ви помогне. javapapers.com /android/   -  person Pratik Butani    schedule 02.12.2015


Отговори (1)


Този отговор е обосновано предположение. Мисля, че авторитетен отговор може да дойде само от вътрешен човек на Google с достъп до кода.

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

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

Това означава, че системата никога няма да предостави разрешението C2D_MESSAGE, което декларирате, на приложение, което не е подписано от вас.

Когато рамката на GCM получи съобщение надолу по веригата, тя знае името на пакета на приложението, до което съобщението трябва да бъде доставено. Не знам как рамката получава тази информация. Може би е включено в метаданните за съобщението. Когато създавате идентификационни данни за вашето клиентско приложение на GCM в Google Developers Console, вие предоставяте името на пакета. Резултатът е асоциация на (API ключ, ID на изпращача, име на пакет и пръстов отпечатък SHA-1). Възможно е GCM сървърът да използва тези данни, за да включи името на целевия пакет в метаданните на съобщението.

Използвайки името на пакета, GCM рамката може да създаде пълния низ за разрешение C2D_MESSAGE и да използва Context.sendBroadcast() метод, който включва разрешението. След това излъчването ще бъде доставено само до екземпляри на GcmReceiver, които притежават това разрешение, което в този случай е това във вашето приложение и само това.

person Bob Snyder    schedule 02.12.2015