Получать сообщения GCM, даже когда приложение закрыто (слайд/отмахнулся)

Вот код, который используется как BroadcastReceiver внутри моей MainActivity

 //Initializing our broadcast receiver
    mRegistrationBroadcastReceiver = new BroadcastReceiver() {

        //When the broadcast received
        //We are sending the broadcast from GCMRegistrationIntentService

        @Override
        public void onReceive(Context context, Intent intent) {
            //If the broadcast has received with success
            //that means device is registered successfully
            if(intent.getAction().equals(GCMRegistrationIntentService.REGISTRATION_SUCCESS)){
                //Getting the registration token from the intent
                String token = intent.getStringExtra("token");
                //Displaying the token as toast
                Toast.makeText(getApplicationContext(), "Registration token:" + token, Toast.LENGTH_LONG).show();

                //if the intent is not with success then displaying error messages
            } else if(intent.getAction().equals(GCMRegistrationIntentService.REGISTRATION_ERROR)){
                Toast.makeText(getApplicationContext(), "GCM registration error!", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(getApplicationContext(), "Error occurred", Toast.LENGTH_LONG).show();
            }
        }
    };

Я следовал этому руководству о GCM

https://www.simplifiedcoding.net/android-push-notification-using-gcm-tutorial/

Ответ 1

Закрытие приложения путем его сползания (более широко известный как прокрутка) не полностью убивает приложение. Ознакомьтесь с этим ответом в сообществе энтузиастов Android для более подробного описания. Вы можете видеть, что упоминается, что:

... Он не будет напрямую заставлять службы останавливаться..

Поскольку слушателями для уведомлений GCM являются Service s, это на самом деле означает, что все еще существует вероятность того, что ваше приложение может продолжать получать их независимо от того, будет ли оно удалено.

Хотя результат прокрутки приложения может также отличаться в зависимости от используемого устройства, можно убить/принудительно остановить его или другое, как указано выше, остановит фоновые процессы.

Если результат, однако, приложение убито/принудительно остановлено, как указано в ответе по ссылке выше:

Для остановки - полное уничтожение приложения - все процессы убиты, все службы остановлены, все уведомления удалены, удалены все тревоги и т.д.

Что может привести к тому, что приложение не получит каких-либо уведомлений вообще, поскольку оно предназначено для Android с версии 3.1, как указано в этом ответе:

Приложения, находящиеся в остановленном состоянии, не получают трансляции.

Остановленное состояние:

когда приложение изначально установлено (до того, как пользователь запускает что-то в приложении) или после принудительного останова. Об этом вы можете найти здесь: http://developer.android.com/about/versions/android-3.1.html#launchcontrols

Надеюсь, это поможет некоторым образом понять некоторые вещи. Ура! : D

Ответ 2

Вы можете попробовать с помощью GcmListenerService Когда вы закрываете приложение, откатываясь, служба все еще активируется в фоновом режиме, и вы можете получать push-уведомление. Если пользователь не будет вручную отключать приложение от установки, эта услуга вам поможет.