3

バックエンドサーバーを実行していない。このようFCM通知を送信します。FCM通知ペイロード - トピック名を決定するアプリが

{ 
    "to": "/topics/599_7041", 
    "priority": "high", 
    "data": { 
    "id_message": "45" 
    } 
    "click_action": "SHOW" 
    "notification" : { 
     "body" : "Lorem ipsum", 
     "title" : "Sample" 
    } 
} 

私のアプリケーションは、複数のトピックをサブスクライブします。アプリケーションが実行されていないとき、Firebaseは通知を表示し、通知メッセージをタップした後、提供されたクリック操作でアプリケーションを実行し、データ(この場合はmessage_id)を起動したアプリケーションインスタンスに渡します。

これまでのところ良いです。しかし、さらに、私は購読されたトピック通知が受信されたかどうかを判断する必要があります。通知から新しいアプリインスタンスを起動するときに何らかの理由でそれを特定できますか、またはデータにトピック名を追加する必要があります(message_idの横)。

私は私のアプリが動作しているときに提出to、この方法を決定することができます知っている:私のアプリが実行されていないので、onMessageReceivedが呼び出されることはありませんどのような場合には、

@Override 
public void onMessageReceived(@NonNull final RemoteMessage remoteMessage) 
{ 
//.... 
String to = remoteMessage.getTo(); 
} 

しかし。

+0

どのようにコンソールからトピックメッセージを送信していますか? –

+0

私の質問を見て、メッセージ本体が含まれています(json) – user1209216

+0

メッセージのタイトルにトピック名を追加します。 –

答えて

0

あなたがこれを行うことができます:

exports.pushNotification = 
functions.database.ref('/messages/{pushId}').onWrite(event => { 

console.log('Push notification event triggered'); 


var valueObject = event.data.val(); 

console.log("it is"+ valueObject.title); 
//Create a notification 
const payload = { 
notification: { 
    title:valueObject.title, 
    body: valueObject.message, 
    sound: "default" 
}, 
}; 

この方法であなたはどんなメッセージがpushidの下に書かれているかどうかを確認するデータベース・トリガーonWriteを、使用しています。

次に、var valueObject = event.data.val();を使用してデータベースからデータを取得します。

そしてには、トピック名になるので、通知を受信すると、トピック名が通知のタイトルになり、どのトピックがどのようなものかを知ることができます。

詳細については、https://firebase.google.com/docs/functions/database-events

+0

さて、私はJSを使用していませんが(IDは関係ありません)、次に、リクエストを変更する必要のない解決策を探していましたが、 'to'フィールドを取得する方法がいくつかあると期待していました。もう着いている。また、私はタイトルにトピック名を含めることは望ましくありません。それを 'data'に置くのが良いでしょう – user1209216

+0

あなたは何をバックエンドで使っていますか? –

+0

これは実際問題ではありませんが、最も重要なことは、私の質問で述べたように、バックエンドがjsonデータでPOSTリクエストを実行することです。 – user1209216

関連する問題