2 Stimmen

GCM-Server gibt Nullwert zurück

Ich versuche, Google Cloud Messaging in meiner Anwendung zu implementieren. Dennoch kann ich nicht herausfinden, warum ich nicht die richtige Nachricht auf meinem Telefon erhalte. Mein Server sendet eine Nachricht, der GCM-Server antwortet darauf und sendet eine Nachricht zurück an mein Telefon, die wie folgt aussieht

{\"multicast_id\":8186678237008516542,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1356727074650189%12aaaeccf9fd7ecd\"}]}"

Ich denke, das bedeutet, dass ich eine Nachricht erhalte, das Problem ist, dass meine App nur Nullwerte anzeigt. Ich bin mit dem Browser-Api-Schlüssel jetzt und erhalten diese Ergebnisse, aber ich habe versucht, Server-Schlüssel zu verwenden (die theoretisch mehr geeignet für meine Bedürfnisse ist), aber ich bekomme Fehler 401.

Für den Empfang der Nachricht verwende ich einen Rundfunkempfänger

  public void onReceive(Context context, Intent intent){

String newMessage = intent.getExtras().getString(EXTRA_MESSAGE);}

EXTRA_MESSAGE = Nachricht

Dies ist der Code, den ich auf meinem Server verwende.

$fields = array(
        'registration_ids' => $registatoin_ids,
        'data' => $message,
    );

    $headers = array(
        'Authorization: key=' . GOOGLE_API_KEY,
        'Content-Type: application/json'
    );
    // Open connection
    $ch = curl_init();

    // Set the url, number of POST vars, POST data
    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // Disabling SSL Certificate support temporarly
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

Weiß jemand, was das Problem sein könnte?

1voto

Bhunnu Baba Punkte 1642

Ich denke, dass der Name Ihrer Antwortzeichenfolge nicht übereinstimmt, also überprüfen Sie bitte den Namen Ihrer Antwortzeichenfolge. Ich habe es als "Preis" in meinem Server-seitigen Code und in meinem Android-Seite code.you kann es in unten Bilder sehen.

Datei auf der Server-Seite : send_message.php

enter image description here

Datei auf der Anwendungsseite : GCMNotificationIntentService

public static final int NOTIFICATION_ID = 1;
private NotificationManager mNotificationManager;
NotificationCompat.Builder builder;

public GCMNotificationIntentService() {
    super("GcmIntentService");
}

public static final String TAG = "GCMNotificationIntentService";

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

    String messageType = gcm.getMessageType(intent);

    if (!extras.isEmpty()) {
        if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR
                .equals(messageType)) {
            sendNotification("Send error: " + extras.toString());
        } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED
                .equals(messageType)) {
            sendNotification("Deleted messages on server: "
                    + extras.toString());
        } else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE
                .equals(messageType)) {

            for (int i = 0; i < 3; i++) {
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                }

            }
            sendNotification("Message Received from Google GCM Server: "
                    + extras.get("price"));
        }
    }
    GcmBroadcastReceiver.completeWakefulIntent(intent);
}

private void sendNotification(String msg) {
    //Log.d(TAG, "Preparing to send notification...: " + msg);
    mNotificationManager = (NotificationManager) this
            .getSystemService(Context.NOTIFICATION_SERVICE);

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            new Intent(this, MainActivity.class), 0);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            this).setSmallIcon(R.drawable.gcm_cloud)
            .setContentTitle("GCM Notification")
            .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
            .setContentText(msg);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
    //Log.d(TAG, "Notification sent successfully.");
}

0voto

Husam A. Al-ahmadi Punkte 2066

Passen Sie Ihren Code von

'data' => $message,

in etwa so aussehen:

'&data.message=' => $message,

und Ihre onMessage()-Methode in GCMIntentService sollte in etwa wie folgt aussehen:

protected void onMessage(Context ctx, Intent intent) {
        // TODO Auto-generated method stub
        String message =intent.getStringExtra("message");;

    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X