2016-03-29 8 views
1

Ich sende GCM Nachricht von meinem Server mit gcm.php. Und es sagt Nachrichten gesendet.Android GCM Nachricht nicht empfangen

{"multicast_id":6717271501903387817,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1459264392497404%479be975f9fd7ecd"}]} 

Für Android ist die AndroidManifest:

<uses-permission android:name="android.permission.INTERNET"/> 

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

<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="android.jokerslab.com.demogpsinfonet.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
<uses-permission android:name="android.jokerslab.com.demogpsinfonet.permission.C2D_MESSAGE" /> 

<!-- GCM Permissions - End here --> 
<uses-permission android:name="android.permission.VIBRATE" /> 

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

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <!-- android.jokerslab.com.demogpsinfonet--> 
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 


    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 


<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="GCMNotificationIntentService" /> 
    </intent-filter> 
</receiver> 

<!-- Register Service --> 
<service android:name=".GCMNotificationIntentService" /> 

BoradCast Empfänger:

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { 

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

Notificaiton Service:

public class GCMNotificationIntentService extends IntentService { 
    // Sets an ID for the notification, so it can be updated 
    public static final int notifyID = 9001; 
    NotificationCompat.Builder builder; 

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

@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)) { 
      sendNotification("Message Received from Google GCM Server:nn" 
        + extras.get(ApplicationConstants.MSG_KEY)); 
     } 
    } 
    GcmBroadcastReceiver.completeWakefulIntent(intent); 
} 

private void sendNotification(String msg) { 

    Toast.makeText(
      getApplicationContext(), 
      "It's working", 
      Toast.LENGTH_LONG).show(); 

    Intent resultIntent = new Intent(this, MainActivity.class); 
    resultIntent.putExtra("msg", msg); 
    PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, 
      resultIntent, PendingIntent.FLAG_ONE_SHOT); 

    NotificationCompat.Builder mNotifyBuilder; 
    NotificationManager mNotificationManager; 

    mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    mNotifyBuilder = new NotificationCompat.Builder(this) 
      .setContentTitle("Alert") 
      .setContentText("You've received new message.") 
      .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark); 
    // Set pending intent 
    mNotifyBuilder.setContentIntent(resultPendingIntent); 

    // Set Vibrate, Sound and Light 
    int defaults = 0; 
    defaults = defaults | Notification.DEFAULT_LIGHTS; 
    defaults = defaults | Notification.DEFAULT_VIBRATE; 
    defaults = defaults | Notification.DEFAULT_SOUND; 

    mNotifyBuilder.setDefaults(defaults); 
    // Set the content for Notification 
    mNotifyBuilder.setContentText("New message from Server"); 
    // Set autocancel 
    mNotifyBuilder.setAutoCancel(true); 
    // Post a notification 
    mNotificationManager.notify(notifyID, mNotifyBuilder.build()); 
    } 
} 

Irgendwelche Hinweise, was fehlt mir hier?

+0

Zuerst musst du API_KEY überprüfen, welches in PHP API Side übergeben wird. Es benutzt Server_key nicht android_key..Bitte gib an, welches in deinem PHP Code benutzt wird. – jigspatel

+0

Ein großer Teil des Codes, den Sie zum Empfangen der Daten auf Ihrer Android-Seite verwenden, ist veraltet. Möglicherweise möchten Sie es aus Wartungsgründen aktualisieren. –

Antwort

2

In der Manifest-Datei, ich glaube, Sie ein paar Zeilen für den Empfänger fehlen:

<service 
      android:name="com.example.MyGcmListenerService" 
       android:exported="false" > 
       <intent-filter> 
        <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       </intent-filter> 
      </service> 

Wenn wir das Dokument für Einrichten ein GCM Client App on Android und vergleichen Sie mit dem angegebenen manifest Code überprüfen, die GCM unterstützen, der Code oben fehlt in Ihrer Manifestdatei.

einfache Downstream-Nachrichten zu empfangen, verwenden Sie einen Dienst, dass extendsGcmListenerService Nachrichten von GcmReceiver gefangen zu handhaben. GcmReceiver erweitert WakefulBroadcastReceiver und garantiert, dass die CPU aktiviert ist, damit der Listener-Service seine Aufgabe erfüllen kann.

durch Überschreiben der Methode GcmListenerService.onMessageReceived können Sie Aktionen auf der empfangenen Nachricht durchführen basiert:

@Override 
public void onMessageReceived(String from, Bundle data) { 
    String message = data.getString("message"); 
    Log.d(TAG, "From: " + from); 
    Log.d(TAG, "Message: " + message); 

    if (from.startsWith("/topics/")) { 
     // message received from some topic. 
    } else { 
     // normal downstream message. 
    } 

    // ... 
} 
0

Register Empfänger in manifestieren sich als

<receiver 
     android:name="com.google.android.gcm.GCMBroadcastReceiver" 
     android:permission="com.google.android.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="packageName" /> 
     </intent-filter> 
    </receiver> 

    <service android:name=".GCMIntentService" /> 

und in GCMIntentService

@Override 
protected void onMessage(Context context, Intent data) { 
    // context=GCMIntentService.this; 
    this.context=context; 
    notifyMessage(data); 


} 
Verwandte Themen