web-dev-qa-db-ja.com

Firebase Cloud Messaging(FCM)を使用してPushNotificationsを特別なUDIDにデバイスから直接送信することは可能ですか?

すべての登録ID(プッシュトークン)をDBに保存し、iPhoneからユーザーに通知を送信することを考えています。このようなことを試しましたが、通知がありませんでした。

func sendPNMessage() {
    FIRMessaging.messaging().sendMessage(
        ["body": "hey"], 
        to: TOKEN_ID, 
        withMessageID: "1", 
        timeToLive: 108)  
 } 

私が間違っていること、または多分それはまったく不可能ですか?

16
Svitlana

現在、アプリケーション自体からメッセージを送信することはできません。 Firebase Webコンソールから、またはサーバー側APIを使用してカスタムサーバーからメッセージを送信できます。

(http呼び出しなどを介して)サーバーに接続すると、そのサーバーがユーザーにメッセージを送信します。このようにして、サーバーのAPI-KEYが確実に保護されます。

PS:sendMessage(..) apiはアップストリーム機能と呼ばれ、サーバーがFCMサーバーとXMPP接続している場合は、アプリからサーバーにメッセージを送信するために使用できます。

19
Diego Giorgini

はい、Firebaseを介してプッシュ通知を送信できます。サーバーキーをクライアントに含めないでください。 「それほど優秀ではない人々のために」それを見つけて何かをする方法があります...それを達成するための適切な方法は、クライアントがアプリサーバーに通知を送信するように指示することです。

HTTP-PostをGoogle-API-Endpointに送信する必要があります。

次のヘッダーが必要です。

Content-Type: application/json
Authorization: key={your_server_key}
You can obtain your server key within in the Firebase-Project.

HTTP-Post-Content: Sample

{ 
    "notification": {
        "title": "Notification Title",
        "text": "The Text of the notification."
    },
    "project_id": "<your firebase-project-id",
    "to":"the specific client-device-id"
}
7
Dupinder kaur

Google Cloud Functionsを使用すると、アプリサーバーなしでデバイス間でプッシュ通知を送信できるようになりました。

Google Cloud Functionsのドキュメントから:

開発者はCloudFunctionsを使用して、ユーザーの関心を維持し、アプリに関する関連情報を最新の状態に保つことができます。たとえば、ユーザーがアプリ内でお互いのアクティビティをフォローできるアプリを考えてみましょう。このようなアプリでは、Realtime Databaseの書き込みによってトリガーされて新しいフォロワーを保存する機能により、Firebase Cloud Messaging(FCM)通知を作成して、適切なユーザーに新しいフォロワーを獲得したことを知らせることができます。

例:

  1. この関数は、フォロワーが格納されているRealtimeDatabaseパスへの書き込み時にトリガーされます。

  2. この関数は、FCMを介して送信するメッセージを作成します。

  3. FCMは、通知メッセージをユーザーのデバイスに送信します。

これはデモプロジェクトです FirebaseとGoogleCloudFunctionsを使用してデバイス間プッシュ通知を送信します。

3
Crashalot

ディエゴの答えは非常に正確ですが、Firebaseのクラウド機能もあり、データベースの変更ごとに通知を送信すると非常に便利です。たとえば、チャットアプリケーションを構築し、フォロワーが新しく変更されるたびに通知を送信するとします。 この関数サンプル は非常に良い例です。

クラウド機能の詳細については、 公式ドキュメント を確認してください。

1
mert