0

Firebaseを使用して特定のユーザーに通知が送られることがあります。私はFCMの方法を知っていて、トークンを持っています。しかし、このチュートリアルや他のチュートリアルでは、送信者を含めて両方のユーザーにプッシュ通知を送信するようにしています。受信者デバイスに関する通知を受け取りたいだけです。長いこと、私はこの問題に取り組んできました。 受信者のキーまたはUIDを探しています。トークン(デバイストークン)や他の子を保存して取得できません。ファイヤーベースの「機能」タブにメッセージを記録することもできますが、それは私が所有しているトークンからフェッチされますか?FirebaseInstanceId.getInstance().getToken(); それでも通知をデバイスにプッシュできません。私はエミュレータでそれをテストしています。私は実際のデバイスでそれをテストする必要がありますか?通知を送信者のデバイスではなく受信者のデバイスにプッシュする必要があります

私のNode.jsコード:

const functions = require('firebase-functions'); 
const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 

var rootRef = 
functions.database.ref('/notifications/{user_id}/{notification_id}'); 

    exports.sendNotification = rootRef.onWrite(event => { 


    const user_id = event.params.user_id; 
    const notification_id = event.params.notification_id; 

    var request = event.data.val(); 

    var payload = { 
    data: { 
     title : "New Message from ", 
     body: "userName has sent you message", 
     icon: "default", 
    } 
    }; 

console.log('We have a notification for device token: ', user_id); 
console.log('Checking if getting inside the node -- ', request.user); 


admin.messaging().sendToDevice(user_id, payload) 
.then(function(response){ 
    console.log('This was the notification Feature',response);  
}) 
.catch(function(error){ 
    console.log('Error sending message ',error);  

    }) 

}) 

がMyFirebaseMEssagingService.java

public class MyFirebaseMessagingService extends FirebaseMessagingService 
{ 
    private static final String TAG = "FCM Service"; 
    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     // TODO: Handle FCM messages here. 
     // If the application is in the foreground handle both data and 
     notification messages here. 
     // Also if you intend on generating your own notifications as a result 
     of a received FCM 
     // message, here is where that should be initiated. 
     //remoteMessage.getNotification().getBody()); 

     if(remoteMessage.getNotification()!=null){ 
      Map<String,String> payload = remoteMessage.getData(); 
      //   String title = 
      remoteMessage.getNotification().getTitle(); 
      //   String message = 
      remoteMessage.getNotification().getBody(); 
      //  Log.d(TAG, "Message Notification Title : " + title); 
      //  Log.d(TAG, "Message Notification Body: " + message); 
      System.out.println("Messaging Service : Title - " + payload.get("title") 
      + " , body - " + payload.get("body")); 
      sendNotification(payload); 

     } 
    } 

    @Override 
    public void onDeletedMessages(){ 

    } 

    private void sendNotification(Map<String,String> payload){ 

     NotificationCompat.Builder builder = new 
       NotificationCompat.Builder(this); 
     builder.setSmallIcon(R.mipmap.ic_launcher); 
     builder.setContentTitle("Firebase Push 
       Notification"+payload.get("title")); 
       builder.setContentText("Notification Text : "+ payload.get("body")); 
       Intent intent = new Intent(this, ChatWindow.class); 
       TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
       stackBuilder.addNextIntent(intent); 
       PendingIntent pendingIntent = 
         stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT); 
       builder.setContentIntent(pendingIntent); 
       NotificationManager notificationManager = (NotificationManager) 
         getSystemService(Context.NOTIFICATION_SERVICE); 
       notificationManager.notify(0, builder.build()); 

    } 

} 

FirebaseIDService.java:

public class FirebaseIDService extends FirebaseInstanceIdService { 
    private static final String TAG = "FirebaseIDService"; 

    @Override 
    public void onTokenRefresh() { 
     // Get updated InstanceID token. 
     String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
     Log.d(TAG, "Refreshed token: " + refreshedToken); 

     DatabaseReference firebase ;//= new Firebase("https://materialtabs- 
     b5734.firebaseio.com//messages"); 
     firebase = 
     FirebaseDatabase.getInstance().getReferenceFromUrl("https://materialtabs- 
       b5734.firebaseio.com//notifications/"); 

       // TODO: Implement this method to send any registration to your app's 
       servers. 
       sendRegistrationToServer(refreshedToken); 
    } 

    /** 
    * Persist token to third-party servers. 
    * 
    * Modify this method to associate the user's FCM InstanceID token with any 
    server-side account 
    * maintained by your application. 
    * 
    * @param token The new token. 
    */ 
    private void sendRegistrationToServer(String token) { 
     // Add custom implementation, as needed. 
     System.out.println("Reading Token : "+ token); 
    } 
} 

そして、私は私の内部の私の 'MyFirebaseMessagingService.java' を始めています"onCreate()"内のMainActivityファイル "startService(new I ntent(this、MyFirebaseMessagingService.class)); "

私を助けてください。私はいくつかの細かい細部を見逃していると思うか、それは確かではない、主要なことができる!

+1

コードを表示してください。 – timiTao

+0

ねえ!私は自分の質問を更新しました。あなたはそれを見てみることができますか?ありがとう! –

答えて

1

このため、受信者のデバイスのFirebaseトークンを保存し、受信者に通知を送信する必要がある場合はいつでも、受信者のトークンをデータベースから取得してから、通知を送信する必要がありますそのトークンを唯一の受信者に送ります。

+0

ちょっと、私はそれをデータベースにデバイストークンとして理解しているトークンを保存していますが、firebaseでコンソールメッセージとトークンを取得できますが、まだデバイスに通知をプッシュできません。 エミュレータで自分のコードをテストしていますが、実際のデバイスでテストすればいいですか? 私のnode.jsコード: –

+0

実際のデバイスでテストする必要があります。私は本当に遅れて返事申し訳ありません。 –

関連する問題