8
votes

GCM renvoie un type de message NULL

J'ai créé une application qui utilise GoogleclouDMesSaging. L'application peut s'inscrire au GCM et stocker son ID d'enregistrement dans la base de données sur mon serveur. J'utilise PHP, pour envoyer des notifications push, mais lorsque le Google l'envoie à mon appareil, le service de l'intention trouve son type de message à NULL. J'ai essayé le même code dans une autre application et cela a bien fonctionné. Mais cette fois ce n'est pas le cas. L'application peut recevoir le message de Google et le gérer en affichant une notification avec un texte vide. J'ai fourni les codes de service et PHP d'intention ci-dessous. Merci pour vos réponses.

send_message.php p> xxx pré>

gcm.php p> xxx pré>

myintentservice.java p >

public class GcmBroadcastReceiver 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);
}
}


5 commentaires

Veuillez poster le code du récepteur de diffusion qui déclenche le service d'intention. Peut-être que vous passez une mauvaise intention du service de l'intention. Je suggère également que vous essayez d'imprimer le type de message dans le récepteur de diffusion, pour voir si c'est NULL là aussi.


Ici, j'ai posté le récepteur de diffusion.


Je ne pense pas qu'il y a quelque chose qui ne va pas avec mon fichier manifeste depuis que l'application peut s'inscrire elle-même et gérer la notification push entrante. Le problème est que le message est null à chaque fois.


Des solutions pour cela? Je suis confronté à un problème similaire.


@MERTKARATAS Avez-vous eu une solution?


3 Réponses :


4
votes

Vérifiez-vous AndroidManifest.xml! Et réparer les paramètres de GCM comme ci-dessous. Dans mon cas, j'ai résolu ce problème "null". Bonne chance! XXX


2 commentaires

Trop tard, mais j'ai le même fichier manifeste que le vôtre mais je suis toujours nul sur gcm.getmessageType (intention); Pouvez-vous hellp? @cmcromance


@Fahidnadeem Je pense que ce n'est pas facile de vous aider. Et nous devrions vérifier cette nouvelle directive sur GCM. Google modifie les codes de contrôle trop souvent !! Connaissez-vous la classe "InstanceID"? Je ne sais pas du tout. Je devrais en apprendre à ce sujet. Je pense que vous préférez apprendre de nouvelles directives si vous êtes souffert de codes à l'ancienne. :) encourager nous !! développeurs.google.com/cloud-Messaging/android/client



1
votes

Dans mon cas, je l'ai réparé en supprimant:

<action android:name="com.google.android.c2dm.intent.REGISTRATION" />


2 commentaires

L'élimination de l'enregistrement a provoqué mon application pour ne plus récupérer les émissions d'enregistrement (pour des raisons évidentes). Donc, bien que cela ne fait pas partie de leur documentation, il semble être nécessaire.


La ligne permet de prendre en charge les périphériques de Kitkat pré-4.4. développeurs.google.com/cloud-Messaging/android/client



-1
votes

Au lieu de vérifier le messageType, tel que proposé par la documentation Android, je viens de vérifier l'action de l'intention. C'est un travail autour de mes yeux, mais fonctionne:

/**
 * Action for GCM registration intents.
 */
private static final String ACTION_GCM_REGISTRATION =
        "com.google.android.c2dm.intent.REGISTRATION";

/**
 * Action for new app updated installed intent.
 */
private static final String ACTION_PACKAGE_REPLACED =
        "android.intent.action.PACKAGE_REPLACED";

@Override
protected void onHandleIntent(final Intent intent) {
    final Bundle extras = intent.getExtras();
    final String action = intent.getAction();
    final GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);

    // messageType will be null for broadcasts with action registration
    // or package replaced
    String messageType = gcm.getMessageType(intent);

    if (!extras.isEmpty()) {
        if (GoogleCloudMessaging.
                MESSAGE_TYPE_MESSAGE.equals(messageType)) {
            onNotification("Received: " + extras.toString());
        } else if (action.equals(ACTION_GCM_REGISTRATION)) {
            onRegistration(extras.getString("registration_id"), intent);
        } else if (action.equals(ACTION_PACKAGE_REPLACED)) {
            onNewAppVersion();
        }
    }

    GcmBroadcastReceiver.completeWakefulIntent(intent);
}


0 commentaires