2016-04-16 14 views
1

ich benutze Google Cloud Messaging und ich sende erfolgreich Push-Benachrichtigung. Das einzige Problem, das ich habe, ist, dass die Methode onMessageReceived immer null erhält. kann ich anhand des Protokolls erkennen, es zeigt mir null. im Senden vom Server an den Benutzer und das ist, was ichGCM - Warum bekomme ich NULL in onMessageReceived?


zum Beispiel 04-16 Dezember erhalten: 29: 17,231 19.637-19.705/com.world.bolandian.watchme
D/MyGcmListenerService: Nachricht : null

Dies ist mein Server-Code

package jdbc; 

import java.io.IOException; 
import java.io.UnsupportedEncodingException; 
import java.net.URLEncoder; 

import javax.sound.midi.SysexMessage; 

import com.google.android.gcm.server.Message; 
import com.google.android.gcm.server.Result; 
import com.google.android.gcm.server.Sender; 

public class GcmSender { 
    private static final int GCM_RETRIES = 2; 

    public void sendGooglePushNotification(String token, String type, String data, String serverApiKey) { 

    // Create Message 
    Message.Builder builder = new Message.Builder().delayWhileIdle(true); 

    try { 
     builder.addData(Params.TYPE_MESSAGE, URLEncoder.encode(type, "UTF-8")); 
     builder.addData(Params.DATA_MESSAGE, URLEncoder.encode(data, "UTF-8")); 
    } catch (UnsupportedEncodingException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    Message message = builder.build(); 

    // Create Sender 
    Sender sender = new Sender(serverApiKey); 

    // Sending Message with Sender to the list of users. 
    try { 

     Result rs=sender.send(message, token, GCM_RETRIES); 
     String ans=rs.toString(); 
     System.out.println(ans); 

     //System.out.println("notification sent"); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     // Failed to Send Message. 

     } 

    } 
} 

Und das i s im Android Code

package com.world.bolandian.watchme; 

import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.NotificationCompat; 
import android.util.Log; 

import com.google.android.gms.gcm.GcmListenerService; 

public class MyGcmListenerService extends GcmListenerService { 

    private static final String TAG = "MyGcmListenerService"; 

    /** 
    * Called when message is received. 
    * 
    * @param from SenderID of the sender. 
    * @param data Data bundle containing message data as key/value pairs. 
    *    For Set of keys use data.keySet(). 
    */ 
    // [START receive_message] 
@Override 
public void onMessageReceived(String from, Bundle data) { 
    String message = data.getString("message"); 
    Log.d(TAG, "From: " + from); 
    Log.d(TAG, "Message: " + message); 

    if (from.startsWith("/topics/")) { 
     // message received from some topic. 
    } else { 
     // normal downstream message. 
    } 

    // [START_EXCLUDE] 
    /** 
    * Production applications would usually process the message here. 
    * Eg: - Syncing with server. 
    *  - Store message in local database. 
    *  - Update UI. 
    */ 

    /** 
    * In some cases it may be useful to show a notification indicating to the user 
    * that a message was received. 
    */ 
    sendNotification(message); 
    // [END_EXCLUDE] 
} 
// [END receive_message] 

/** 
* Create and show a simple notification containing the received GCM message. 
* 
* @param message GCM message received. 
*/ 
private void sendNotification(String message) { 
    Intent intent = new Intent(this, MainActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
      PendingIntent.FLAG_ONE_SHOT); 

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark) 
      .setContentTitle("ALERT") 
      .setContentText(message) 
      .setAutoCancel(true) 
      .setSound(defaultSoundUri) 
      .setContentIntent(pendingIntent); 

    NotificationManager notificationManager = 

      (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
    } 
} 

ich die GCM Nachricht zu tun bekommen, aber ohne die Nachricht (Daten), die ich von dem Server senden. und auf dem Protokoll zeigt es mir null. haben Sie eine Idee, wie Sie das beheben können?

Antwort

1
Message.Builder builder = new Message.Builder().addData("message", "Your string here").delayWhileIdle(true); 

ODER

Message message = new Message.Builder().addData("message", "Your string here").delayWhileIdle(true).build(); 

In Server-Seite Sie Daten in die Nachricht einzufügen müssen Sie Daten mit Schlüssel und Wert hinzufügen sollte, dann werden Sie es in Android wie das bekommen, in Ihrem Code Sie Daten warten von Schlüssel "Nachricht" in Android, während keine senden sie vom Server

+0

im tut mir leid, aber vielleicht mache ich etwas falsch, aber Nachricht Nachricht = new Message.Builder(). addData ("Nachricht", "Ihre Zeichenfolge hier") .build() ** bekommt einen Fehler dafür. Mein Code mit dem Erbauer stimmt nicht? –

+0

Message.Builder-Builder = neue Message.Builder(). AddData ("Nachricht", "Ihre Zeichenfolge hier"). DelayWhileIdle (true); es Fehler erhalten? –

+0

hat es funktioniert! Danke Message.Builder builder = new Message.Builder(). addData ("Nachricht", "Ihre Zeichenfolge hier"). delayWhileIdle (true) –

Verwandte Themen