2017-11-14 12 views
0

状況は次のとおりです。特定のデータベースコレクション(「ジャムルーム」と呼ばれる)への書き込みごとに実行されるfirebaseクラウド機能があります。次のようにNodeJSスクリプトは次のとおりです。スクリプトが正常たびにaを実行するFirebase Messaging - サブスクリプションからの通知を受け取ることができません

FirebaseMessaging.getInstance().subscribeToTopic("new-jamroom"); 

:クライアント側(アンドロイド)で

const functions = require('firebase-functions'); 

// The Firebase Admin SDK to access the Firebase Realtime Database. 
const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 

exports.newJamroom = functions.database.ref('/jamrooms/{jamroomId}').onWrite(event => { 

     // Grab the current value of what was written to the Realtime Database. 
     var jamroomId = event.params.jamroomId; 

     var topic = "new-jamroom"; 
     var payload = { 
      data: { 
       title: "New jamroom available !", 
       body: String("Jamroom id = ").concat(jamroomId) 
      } 
     }; 

     // Send a message to devices subscribed to the provided topic. 
     return admin.messaging().sendToTopic(topic, payload) 
      .then(function (response) { 
       // See the MessagingTopicResponse reference documentation for the 
       // contents of response. 
       console.log("Successfully sent message:", response); 
      }) 
      .catch(function (error) { 
       console.log("Error sending message:", error); 
      }); 
}); 

、私は、トピック「新・jamroom」に加入しました新しいキーと値のペアは、コレクションに追加されます。

enter image description here

が、クライアントは、バックグラウンドでまたはフォアグラウンドのいずれかで、通知を受けたことはありません。

私は正しいことが分からないことを理解するためにどこを見るかわかりません。 (コンソールに存在するトピック「新jamroom」を、使用して)コンソールから

更新

でも通知の送信は、(送信されFirebaseレコード0)、それをクライアントに送信しません。

答えて

1

あなたのペイロードがdataキーが含まれているので、あなたはデータのみのメッセージではなく、通知送信されます。

var payload = { 
     data: { 
      title: "New jamroom available !", 
      body: String("Jamroom id = ").concat(jamroomId) 
     } 

をデータメッセージと通知メッセージは、受信機によるhandled differentlyです。データのみのメッセージでは、受信者でonMessageReceived()が呼び出されます。通知を生成するには、notificationキーを使用してペイロードを構築します。

var payload = { 
     notification: { // <= CHANGED 
      title: "New jamroom available !", 
      body: String("Jamroom id = ").concat(jamroomId) 
     } 
+0

正午、私はそれを午後に気付きました。だから、私のエミュレータではなく、共同開発者が通知を受け取ったのですが、私はそうではありませんでした。私は設定上の問題だと思っていますが、どちらがまだ問題なのかはわかりません。 –

+0

@ArthurDeschamps:ログキャストで「W/GooglePlayServicesUtil:Google Playサービスの期限切れ」を確認してください。エミュレータに古いバージョンのGoogle Playサービスがある可能性があります。 –

+0

実際に私は実際のAndroid携帯電話でも試してみましたが、通知もありません。どちらの場合も、logcatにそのようなメッセージはありません。 –

関連する問題