2016-10-05 2 views
0

Я отправляю уведомление с сервера с помощью Firebase на Android. Мой код работает, когда я отправляю уведомление из Firebase Console, но он не работает, когда я отправляю сообщение с моего сервера. Я включил отладку, и я проанализировал, что метод FirebaseMessagingService не вызван onMessageReceived.onMessageReceived никогда не вызывал уведомление с сервера с помощью Firebase в Android

Вот мой FirebaseMessagingService код:

public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService { 
    private static final String TAG = FirebaseMessagingService.class.getSimpleName(); 

    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 

     showNotification(remoteMessage.getData().get("message")); 
    } 

    private void showNotification(String message){ 

      Intent intent = new Intent(this, MainActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
      Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
      NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
        .setSmallIcon(R.drawable.ic_launcher) 
        .setContentTitle("Firebase Push Notification") 
        .setContentText(message) 
        .setAutoCancel(true) 
        .setSound(defaultSoundUri) 
        .setContentIntent(pendingIntent); 
      NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
      notificationManager.notify(0, notificationBuilder.build()); 
     } 
    } 

Вот мой PHP код серверной части»

public function sendPushNotificationToGCMSever($token, $message){ 

     //include_once 'config.php'; 

     $url = 'https://fcm.googleapis.com/fcm/send'; 

     $fields = array(
       'registration_ids' => $token, 
       'notification' => $message 
     ); 

     $headers = array(
       'Authorization:key=' . SERVER_KEY, 
       'Content-Type:application/json' 
     ); 
     $ch = curl_init(); 

     $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); 
     curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 

     $result = curl_exec($ch); 

     curl_close($ch); 

     return $result; 
    } 

Может кто-нибудь сказать мне, что я делаю неправильно Любая помощь была бы оценена? Спасибо!

+0

Является ли ваше приложение на переднем плане или в фоновом состоянии? –

ответ

0

guide говорит, что (для отправки уведомлений, подобных консоли) ваш $fields должен быть (если $message представляет собой строку)

$fields = array(
       'to' => $token, 
       'notification' => array(
         'body' => $message 
       ), 
     ); 

Вы также можете выбрать значок уведомления, установив 'icon' => 'the name of some file in res/drawables', как описано in this blog post

см также разницу между данными только сообщения и уведомления в руководстве.

При попытке передачи данных только сообщения и onMessageReceived, то вы, возможно, забыл добавить (как указано в guide)

<service 
    android:name=".MyFirebaseMessagingService"> 
    <intent-filter> 
     <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
    </intent-filter> 
</service> 
AndroidManifest.xml 
+1

Это отправит сообщение данных, в то время как консоль всегда будет отправлять уведомления. См. Https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages –

+0

Я пробовал то же, что и вы, но не повезло :( –