2015-01-31 2 views
0

Я внедрил GCM уведомления в Android и все работало нормально. Я отправляю Уведомления на телефон через PHP-сервер, используя Службу облачных сообщений Google.
Через неделю или около того я снова установил это приложение на свой телефон и отправил тестовое уведомление на свой телефон, но ничего не получил. Скрипт PHP работает без ошибок с success=1 и без кононического идентификатора в ответе GCM. WakufulBroadcastReceiver не запускается в приложении для Android.WakefulBroadcastReceiver onReceive не запускает андроид GCM

Вот полный код, который я использую:

GcmBroadcastReceiver.java

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("", "In Receive Method of Broadcast Receiver"); 
     ComponentName cn = new ComponentName(context.getPackageName(), GcmMessageHandler.class.getName()); 
     startWakefulService(context, intent.setComponent(cn)); 
     setResultCode(Activity.RESULT_OK); 
    } 
} 

GcmMessageHandler.java

public class GcmMessageHandler extends IntentService{ 

    Handler handler; 
    public GcmMessageHandler() { 
     super("GcmMessageHandler"); 
     // TODO Auto-generated constructor stub 
    } 
    public GcmMessageHandler(String name) { 
     super("GcmMessageHandler"); 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     handler = new Handler(); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); 
     String messageType = gcm.getMessageType(intent); 
     final String message = intent.getExtras().getString("name"); 
     Log.d("GCM", "Received : (" +messageType+") "+intent.getExtras().getString("name")); 
     handler.post(new Runnable() { 

      @Override 
      public void run() { 
       Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); 
      } 
     }); 
     GcmBroadcastReceiver.completeWakefulIntent(intent); 

    } 

} 

Manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.test_push_app" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="21" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <permission 
     android:name="com.example.test_push_app.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 
    <uses-permission android:name="com.example.test_push_app.permission.C2D_MESSAGE" /> 


    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <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.test_push_app" /> 
      </intent-filter> 
     </receiver> 
     <service android:name=".GcmMessageHandler" /> 

     <meta-data android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 
    </application> 

</manifest> 

В MainActivity.java Я использую эту задачу для регистрации

private class Register extends AsyncTask<Void, Void, String>{ 

     String regID; 

     @Override 
     protected String doInBackground(Void... params) { 
      try{ 
       regID = gcm.register("40441*******"); 

      }catch(Exception ex){ 
       regID = "Failed"; 
       //Log.d("", ex.getMessage()); 
       ex.printStackTrace(); 
      } 
      return regID; 
     } 
     @Override 
     protected void onPostExecute(String result) { 
      etRegid.setText(result); 
      Log.d("", result); 
      super.onPostExecute(result); 
     } 

    } 

PhpResponse:

{ 
    "multicast_id": 7260653358308753695, 
    "success": 1, 
    "failure": 0, 
    "canonical_ids": 0, 
    "results": [{ 
     "message_id": "0:1422710889970517%ef663a58f9fd7ecd" 
    }] 
} 

Помоги мне! Благодарю.

Примечание: GooglePlayServices также установлены в телефоне. При регистрации я не получаю ошибки.

+0

пожалуйста пост весь журнал cat.and также проверяет ответ скрипта php при отправке gcm. –

+0

Лог кот нечего показать. ничего не связано. и php-скрипт не дает ответа. –

+0

@ImtiyazKhalani См. Ответ php выше –

ответ

0

Убедитесь, что вы

  1. Подпись сборки с правильным ключом (Dev против производства)
  2. Обновленный ваш PHP скрипт для отправки сообщения на новый GCM регистрационный номер
+0

Я в режиме отладки. устанавливая непосредственно из eclipse в телефон. Затем я регистрирую приложение и использую этот regID в php-скрипте. скрипт не дает ошибок, но приложение ничего не получает. мое интернет-соединение прекрасно работает на телефоне. –

Смежные вопросы