Les Notifications Push lorsque l'application est fermée
Savez-vous si il est possible de recevoir des notifications de google cloud message lorsque l'application est entièrement fermé?
Je sais que si elle est ouverte ou dans le fond oui, mais peut-il être programmé de toute façon, afin de les recevoir?
EDIT:
Je continue sans de recevoir des notifications lorsque l'application est fermée.
J'ai collé le code dans le cas où j'ai une erreur et je ne suis pas le regarder.
MANIFESTE
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.frab"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.frab.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<permission
android:name="com.frab.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.frab.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".GGMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.something" />
</intent-filter>
</receiver>
<service android:name=".GCMIntentService" />
</application>
</manifest>
RÉCEPTEUR DE RADIODIFFUSION
package com.something;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import com.activities.SignIn;
import com.google.android.gcm.GCMBaseIntentService;
import com.objects.Globals;
public class GCMIntentService extends GCMBaseIntentService {
private static final String TAG = "GGM <-----> FRAB";
private Bundle extras;
public GCMIntentService() {
super(Globals.SENDER_ID);
}
@Override
public void onDestroy() {
Log.d(TAG, "terminando servicio");
}
@Override
protected void onRegistered(Context context, String registrationId) {
Log.i(TAG, "onRegistered: registrationId=" + registrationId);
}
@Override
protected void onUnregistered(Context context, String registrationId) {
Log.i(TAG, "onUnregistered: registrationId = " + registrationId);
}
@Override
protected void onMessage(Context context, Intent data) {
extras = data.getExtras();
String message = extras.getString("msg");
Log.d("******", message);
sendNotification(message);
}
@Override
protected void onError(Context arg0, String errorId) {
Log.e(TAG, "onError: errorId = " + errorId);
}
}
package com.something;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.support.v4.content.WakefulBroadcastReceiver;
public class GGMBroadcastReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Explicitly specify that GcmIntentService will handle the intent.
ComponentName comp = new ComponentName(context.getPackageName(), GCMIntentService.class.getName());
//Start the service, keeping the device awake while it is launching.
startWakefulService(context, (intent.setComponent(comp)));
setResultCode(Activity.RESULT_OK);
}
}
Lorsque l'application est ouverte : OK
Lorsque l'application est en arrière-plan : Ok
Lorsque l'application est fermée avec force par l'utilisateur : notifications n'arrivent pas
Quel est le problème?
Merci beaucoup.
- user3757628 : Comment avez-vous résolu le problème?
Vous devez vous connecter pour publier un commentaire.
Oui, il est possible de recevoir des notifications de google cloud message lorsque l'application est entièrement fermée".
En effet, Un récepteur de radiodiffusion est le mécanisme GCM utilise pour transmettre des messages.
Vous avez besoin de mettre en œuvre un BroadcastReceiver et de le déclarer dans le AndroidManifest.xml.
Veuillez vous référer à l'extrait de code suivant.
AndroidManifest.xml
Code Java
Lors de la GCM, remet un message de votre appareil,
BroadcastReceiver
recevra le message et appeler laonReceive()
fonction, dans lequel vous pouvez démarrer un service pour effectuer la tâche pour vous.L'exemple de Code ci-dessus utilise un spécialisé
BroadcastReceiver
appeléWakefulBroadcastReceiver
, qui permet de s'assurer que l'appareil ne se met pas en veille, tandis que le service est en train de faire son travail.Consultez la page Officielle Android Page pour la même chose: https://developer.android.com/google/gcm/client.html
C'est une fonctionnalité de la plate-forme Android. Forcer l'arrêt d'une application par l'utilisateur met l'application dans un état arrêté et aucun de ses code est exécuté, y compris toute récepteurs de radiodiffusion déclaré dans le manifeste. Seulement lorsque le consentement explicite de l'utilisateur lance l'application, il est mis dans un état où les récepteurs me faire virer.
Pour davantage de lecture: http://www.doubleencore.com/2014/06/effects-android-application-termination/
Il ne fonctionnera pas sur le meurtre de l'application dans le gestionnaire des tâches, mais le travail si vous il suffit de glisser loin de récent. J'ai essayé de faire sur whatsapp en le tuant et demander à quelqu'un de envoyer un msg pour moi, et je n'ai pas de notification. Puis j'ai commencé à l'application, et j'ai reçu la notification.
Je viens de terminer une GCM app.
Il fonctionne encore bien, si vous fermez l'application. La chose est, vous devriez déjà avoir ouvert l'application, pour une fois.
créer deux classes pour atteindre cet objectif:
GcmBroadcastReceiver
etGcnIntentService
.Trouver plus d'informations
http://developer.android.com/google/gcm/index.html
L'astuce est là
la classe étendue est
WakeFulBroadcastReceiver
. Il y a un WAKE_LOCK autorisation de votre Manifest.xml.Ceci permet d'utiliser des
PowerManager
WakeLocks
de garder le processeur de dormir ou de l'écran à partir de gradation.Toutefois, si vous étendez
BroadcastReceiver
, il ne fonctionnera pas après l'application est fermée.Firebase API a deux types de messages, ils les appellent:
trouver plus d'informations à partir de ici
IMPORTANT : Vous ne pouvez pas envoyer des données de la charge utile des messages de Firebase Console, la Console ne délivre un message de notification. Donc j'ai mentionné comment envoyer des notifications push à l'aide de facteur veuillez suivre les étapes ci-dessous pour que.
Vous devez envoyer des messages push avec des données de charge utile en raison de données de charge utile - N'a pas d'importance si votre application est au premier plan ou d'arrière-plan ou tués, ces messages seront toujours livrés à onMessageReceived() méthode.
Dans Android 8.0 Oreo si l'application est fermée, alors avis n'est pas reçu, C'est parce que de DOZE mode et d'optimisation de la batterie,il vous suffit de désactiver l'optimisation de la batterie pour toutes applications ou une application en particulier.
Désactiver l'optimisation de la batterie de votre application, ci-dessous étape:
Paramètres>> Pile >> Optimisation de la batterie >> trouver votre app >> select >> si optimisée cliquez sur ne pas optimiser >> essayer de pousser la notification
Envoyer des notifications push à l'aide de facteur
Étape 1: https://fcm.googleapis.com/fcm/send
Étape 2: Définir ce deux en en-Tête
Autorisation : key=AIzaSyBuRl1Ikz3VXFvU7xW9mmg51lJ3udsh
Content-Type : application/json
Étape 3: Envoyer ce json
Espère que cela aide..
Profiter 🙂 🙂
Après quelques tests que j'ai fait sur cette question, j'ai trouvé qu'il se comporte différemment sur la façon dont l'application est fermée. Si vous fermez l'application, tandis que le câble est connecté à l'appareil, puis il bloque toute notification lorsque l'application est fermée.
Toutefois, si vous prenez le câble de l'appareil hors tension et fermer l'application, lorsque vous envoyez la notification, tout fonctionne à nouveau, comme il se doit!
Dans le cas où vous obtenez une "Attente pour le Débogueur" popup message, juste redémarrer le périphérique, puis d'envoyer une notification de test!
J'ai essayé un autre téléphone et le deuxième a parfaitement fonctionné, même lorsque le téléphone est éteint. Le premier avait une chambre qui ne permettait pas d'être notifié lorsque l'application a été fermée ...
Merci à tous
J'ai eu le même problème sur Oneplus téléphone. Comme mentionné par de nombreuses personnes ci-dessus, la question a été forcée d'application de la résiliation. Dans mon cas, cela a été fait en raison de "la Récente Application de gestion de la" configuration comme indiqué ci-dessous. Une fois que je l'ai changé à la "Normale" claire paramètre tout a commencé à bien fonctionner.