0

私は、誰かがイベントを好きなときに私のアプリに通知を送るようにしようとしています。Firebaseのクラウド機能でバッチ通知APIを使用するにはどうすればよいですか?

私はこのようにそれを行うことを試みた:

exports.likeAddedNotification = functions.database.ref('/eventLikes/{eventID}/{userWhoLikedID}').onWrite(event => { 
    const userWhoLikedID = event.params.userWhoLikedID; 
    console.log("User has liked a post " + userWhoLikedID); 

    admin.database().ref('events/' + event.params.eventID).once('value').then(function(snapshot) { 
    var usersID = snapshot.val().userId; 
    console.log("The person who made the post is " + usersID); 

    //Send notification to that user 
    var payload = { 
     "group_id": "batch_push_sender", 
     "push_time": "now", 
     "message": { 
     "body": usersID + " liked your event" 
     }, 
     "recipients": { 
     "custom_ids": [usersID] 
     }, 
     "sandbox": true, // Only for iOS 
    }; 

    notificationRequest.write(JSON.stringify(payload)); 
    notificationRequest.end(); 

    console.log("Sent a notification to " + usersID); 

    }); 
}); 

(そんなにコードを含むため申し訳ありませんが、私はそれがすべての関連するかもしれないと感じ) 私はこのコードを使用して

var payload = ... 
を削除した場合

notificationRequest.write(JSON.stringify(payload)); 
notificationRequest.end(); 

それは私が期待する正確にどのように動作します。どの投稿が好きで誰がその投稿を好きだったかをコンソールに書き出します。

閉鎖時に問題が発生しているのか、間違ったことをしているのか、またはエラーを引き起こすバッチAPIの場合は、実際にはわかりません。

UDIDをカスタムIDとして使用できるプッシュ通知用の優れたサイトが分かっているため、各デバイスのトークンを手動で処理する必要はありません。

+1

A)必ずプロミスを返すようにしてください。それは、ワーカーがそれを保つことを保証する唯一の方法です。通知は同期であるため、リクエストが中止される可能性が非常に高いです。 B)Firebase Admin SDKのメッセージ機能をチェックしてください。 –

+1

Github https://github.com/firebase/functions-samples/tree/master/fcm-notifications –

+1

に例があります。これは良い答えです。James! :-) –

答えて

1

まず、あなたの約束を返すことを忘れないでください。それは、クラウドファンクションワーカーが物事を維持することを保証する唯一の方法です。 Firebase Cloud通知は同期しているので、リクエストが中止されている可能性が非常に高いです。

Firebase Admin SDKのメッセージングコンポーネントもチェックしてください。私たちは、FCM用の素晴らしいAPIをいくつか作りました。 GitHub上のCloud BaseのCloud機能でこれらを使用する方法の例があります。https://github.com/firebase/functions-samples/tree/master/fcm-notifications

+0

ありがとう!ですから、明確にするために、admin.database()の前にリターンを追加することを意味しますか?ref( 'events /' + event.params.eventID).once?私は非常に頻繁にjavascriptを使用しないので、私はこの質問がいかに簡単であるかについて謝罪します。 – Dallas

+0

はい。また、その中にあなたのnotificationRequestを返します。これは、あなたが使用しているリクエストlibが約束をサポートしていると仮定して、その呼び出し中に約束を保ちます。 –

+1

リクエストを使って手動でビルドしている場合は、素晴らしいラッパーを提供するrequest-promiseをチェックアウトすることをお勧めします。 –

関連する問題