Я пытаюсь отправить push-уведомление через GCM, но я получаю:
{ "multicast_id":4793018731783267982, "success":1, "failure":0, "canonical_ids":0, "results": [ { "message_id":"0:1452928098906665%a69ccee8f9fd7ecd" } ] }
но все равно никакого уведомления не поступает. Вот мой код:
//index.php code $app->get( '/notify',function () use($app) { $response = array (); $regId="device registration id"; //hard coded $message="hi everyone.this is to notify you" ; $registatoin_ids = array($regId); $message = array("price" => $message); $db = new DbHandler (); $result = $db->send_notification($registatoin_ids, $message); echoRespnse ( 200, $result); } ); //Dbhandler code public function send_notification($registatoin_ids, $message) { $url = 'https://android.googleapis.com/gcm/send'; $fields = array( 'registration_ids' => $registatoin_ids, 'data' => $message, ); $headers = array( 'Authorization: key=AIzaSyByR3xuTkhB-OZSNTlQqlwnqsLBzqXUWb0', //server key 'Content-Type: application/json' ); $ch = curl_init(); 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)); // Execute post $result = curl_exec($ch); if ($result === FALSE) { die('Curl failed: ' . curl_error($ch)); } // Close connection curl_close($ch); return $result; }
Примечание. Я запускаю этот API непосредственно из расширенного клиента для отдыха вместо устройства Android. Я получаю успех в ответ, но не уведомляю об устройстве, чей reg_id у меня жестко закодирован здесь. Пожалуйста, помогите
Edit ================= Я написал этот код на конце Android:
if (checkPlayServices()) { gcm = GoogleCloudMessaging.getInstance(this); if (regid.isEmpty()) { new register().execute(); } else { Log.i("hello", "No valid Google Play Services APK found."); } } public class register extends AsyncTask<Void, Integer, String> { @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(Void... params) { String msg = ""; try { if (gcm == null) { gcm = GoogleCloudMessaging.getInstance(getApplicationContext()); } regid = gcm.register(AppConst.SENDER_ID); Log.i("hello", "Current Device's Registration ID is: "+regid); } catch (IOException ex) { msg = "Error :" + ex.getMessage(); } return null; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); } }
В Mainfest я добавил:
<receiver android:name=".GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.example" /> </intent-filter> </receiver>