簡體   English   中英

無法從GCM收到消息

[英]cant get the message from GCM

我正在構建基於GCM的應用程序。 現在,我成功獲得了通知,但是我收到的消息是一個空對象,我不知道為什么會發生。

這是GCM的服務器端:

  <?php


class GCM {



     function __construct() {

        }

        public function send_notification($registatoin_ids, $message) {
            // include config
            include_once 'connection.php';

            // Set POST variables
            $url = 'https://android.googleapis.com/gcm/send';

            $fields = array(
                'registration_ids' => $registatoin_ids,
                'data'             => array("message" => $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_IPRESOLVE, CURL_IPRESOLVE_V4 );
            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));

            // Execute post
            $result = curl_exec($ch);
            if ($result === FALSE) {
                die('Curl failed: ' . curl_error($ch));
            }

            // Close connection
            curl_close($ch);
            return $result;
        }
    }
    ?>

這是GCM客戶端實現:GcmBroadcastReciever:

    package com.example.matant.gpsportclient.GoogleCloudNotifications;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;


public class GcmBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        ComponentName comp = new ComponentName(context.getPackageName(),
                GCMIntentService.class.getName());
        context.startService((intent.setComponent(comp)));
        setResultCode(Activity.RESULT_OK);
    }

}

GCMIntentService:

       package com.example.matant.gpsportclient.GoogleCloudNotifications;


    import java.util.Timer;
    import java.util.TimerTask;

    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.os.PowerManager;
    import android.util.Log;

    import com.example.matant.gpsportclient.R;
    import com.google.android.gcm.GCMBaseIntentService;


    public class GCMIntentService extends GCMBaseIntentService {

        private static final String TAG = "GCM Tutorial::Service";

        // Use your PROJECT ID from Google API into SENDER_ID
        public static final String SENDER_ID = "8462XXXXXX";

        public GCMIntentService() {
            super(SENDER_ID);
        }

        @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) {
            String message;
            // Message from PHP server
            message = data.getStringExtra("message");
            // Open a new activity called GCMMessageView
            Intent intent = new Intent(this, GCMMessageView.class);
            // Pass data to the new activity
            intent.putExtra("message", message);
            // Starts the activity on notification click
            PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent,
                    PendingIntent.FLAG_UPDATE_CURRENT);
            // Create the notification with a notification builder
            Notification notification = new Notification.Builder(this)
                    .setSmallIcon(R.drawable.gpsport_logo_icon)
                    .setWhen(System.currentTimeMillis())
                    .setContentTitle("GPSport Notification")
                    .setContentText(message).setContentIntent(pIntent)
                    .getNotification();
            // Remove the notification on click
            notification.flags |= Notification.FLAG_AUTO_CANCEL;

            NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            manager.notify(R.string.app_name, notification);

            {
                // Wake Android Device when notification received
                PowerManager pm = (PowerManager) context
                        .getSystemService(Context.POWER_SERVICE);
                final PowerManager.WakeLock mWakelock = pm.newWakeLock(
                        PowerManager.FULL_WAKE_LOCK
                                | PowerManager.ACQUIRE_CAUSES_WAKEUP, "GCM_PUSH");
                mWakelock.acquire();

                // Timer before putting Android Device to sleep mode.
                Timer timer = new Timer();
                TimerTask task = new TimerTask() {
                    public void run() {
                        mWakelock.release();
                    }
                };
                timer.schedule(task, 5000);
            }

    }

    @Override
    protected void onError(Context arg0, String errorId) {

        Log.e(TAG, "onError: errorId=" + errorId);
    }
}

GCM以捆綁形式返回數據,請嘗試使用數組而不是直接使用消息值

 $data=array();
  $data['message']=$message;
  $data['new_data']=$newData; 

然后再添加將該數組傳遞給GCMfield數組

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

另外,請確保在調用send_notification函數時傳遞!null消息:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM