Intereting Posts
Предложения орфографии дают избыточные значения с помощью android.text.TextWatcher Сделать вкладки в ActionBar прокручивать, когда достигнут предел, а не создавать выпадающий список Android – увеличение / уменьшение местоположения RelativeLayout с распространением / пинчем Удалить значок, но HomeAsUp в ActionBar Исправлено, где / когда описываетсяContents () используется? Как добавить индикатор «меню» рядом с значком приложения «Панель действий»? Установите абсолютное положение вида Как включить автоматический запуск для моего приложения в xiaomi программно Как уменьшить размер sdk для Android на жестком диске «Компоненты IntentReceiver не могут регистрироваться для получения намерений» при попытке определить уровень заряда батареи Есть ли простой способ настроить эмулятор Android для доступа к локальной сети хост-машины? Android CardView со странной границей при прозрачности Android Spinner: Получить выбранное событие изменения элемента Почему добавление OnClickListener внутри onBindViewHolder из RecyclerView.Adapter считается плохой практикой? Android Timer гаснет, когда экран телефона заблокирован

Сообщение Android GCM успешно отправлено, но не получено

Я пытаюсь использовать службу GCM для отправки push-уведомлений на мои устройства.

Я следил за учебником Android Hive (который теперь устарел, как и многие другие вопросы и ответы об этом) для серверных функций, которые выглядят так, как ожидалось, так как я могу получить такие результаты:

{"multicast_id":9131068334342174816,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1377441098827443%1d84a26ff9fd7ecd"}]} 

Но, согласно некоторым ответам , получение этого ответа просто означает, что сообщение было принято серверами GCM для отправки, но не было отправлено. Итак, как и ожидалось, мой BroadcastReceiver ничего не получает.

Вот мой код BroadcastReceiver :

 public class GcmBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i("gcm_debug", "PushReceiver onReceive called"); Bundle extras = intent.getExtras(); GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context); String msgType = gcm.getMessageType(intent); if(!extras.isEmpty()){ if(GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(msgType)){ Log.i("gcm_debug", "Message send error"); }else if(GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(msgType)){ Log.i("gcm_debug", "Message deleted"); }else if(GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(msgType)){ Log.i("gcm_debug", "Message received : " + extras.toString()); } } setResultCode(Activity.RESULT_OK); } } 

И мой AndroidManifest :

 <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <permission android:name="<MYAPP>.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="<MYAPP>.permission.C2D_MESSAGE" /> <!-- Require OpenGL ES2 for GMap --> <uses-feature android:glEsVersion="0x00020000" android:required="true" /> <!-- Because this app is using the GCM library to send messages, the min SDK cannot be lower than 8 --> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/LovRTheme" > <receiver android:name=".GcmBroadcastReceiver" android:permission="com.google.android.gcm.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <!-- <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> --> <category android:name="<MYAPP>" /> </intent-filter> </receiver> <service android:name=".GcmIntentService" /> 

И серверный код:

  $url = "https://android.googleapis.com/gcm/send"; $fields = array( 'registration_ids' => array($dstRegId), 'delay_while_idle' => true, 'data' => array("message" => $message)); $headers = array( 'Authorization: key=' . $google_api_key, 'Content-Type: application/json'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); $result = curl_exec($ch); if($result === FALSE){ die("Curl failed"); } curl_close($ch); echo $result; 

Я кодирую из дома, поэтому я предполагаю, что у GCM не будет проблем с подключением и выходом из сети, поскольку GCM использует какое-то соединение с обратной оболочкой. Во всяком случае, я не получаю ни одного из выходных данных журнала, которые я ожидаю.

EDIT: после того, как я оставил приложение некоторое время, LogCat отправил мне следующие результаты:

 08-26 00:00:48.984 17966-17966/? D/GCM: Ignoring attempt to send heartbeat on dead connection. 08-26 00:01:49.000 17966-17966/? D/GCM: Ignoring attempt to send heartbeat on dead connection. 08-26 00:02:01.672 433-448/? W/BroadcastQueue: Permission Denial: broadcasting Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10 pkg=<myApp> (has extras) } from com.google.android.gsf (pid=17966, uid=10003) requires com.google.android.gcm.c2dm.permission.SEND due to receiver com.navissal.lovr/com.navissal.lovr.GcmBroadcastReceiver 08-26 00:17:09.063 17966-17966/? D/GCM: Ignoring attempt to send heartbeat on dead connection. 08-26 00:18:09.086 17966-17966/? D/GCM: Ignoring attempt to send heartbeat on dead connection. 08-26 00:24:15.250 3936-3951/? V/meshclient: uri: [/beacon?e=wTkyFfdWFtlzOme7rNizVCtnUu9t3SbJgKCe72og-OhyhGIYab1QikytBeU2Nc02QwdDtqI4sX7HHU6GpDQL8zZdKXFXmCics6ZG-Jmr84yvMX1x9EqdyyW1UI6PEhoOb9MV4R_msQ_MEWFnwUzQrV-vGTycKtSNKMMIRE-zM1caIe__7hdu_UStbhz0dhl7cAFmHYF74IQI6EYFCEORxgV2Wts4Ls-hRWEKfEzuBhViND7TeCVpqUOhdVwGMnDO_Qwlo0rpuSNFegdfJCYY4L8fZJogPsXdQW2cFSZ2S0kujCH9uIrljFUTSGcM5GCFuJRq8vWiTP07MqpMq7h2fGGpXQvjImFcVP81erkVzvlYu3bNpjyQe6MhxSFEZrG37Kdp2Fd3liXFZzSjKlLILeYsDK9rRYqO8fEy3PH07et1HjqYWrH-v7wnjcQm6TtyZu914oR-dPBAwX9D3WvbdQlPlqxnuwJ1huUTwaiKotPLgrAzo3Mc5vI93VTs3row] 

Solutions Collecting From Web of "Сообщение Android GCM успешно отправлено, но не получено"