2017-03-12 27 views
-2

ファイアベースをバックエンドデータベースとして使用して、Instagramと同様のアプリを作成しました。このアプリには、ユーザーがあなたの投稿を気に入ったり、あなたの投稿にコメントすることができるすべての機能があります。しかし、今では通知の部分が残っています。私はFCMに関するいくつかのドキュメントを読んで、いくつかのチュートリアルを続けました。しかし、私は投稿を好き/コメントした人の名前としてのタイトルとコメントの内容としてのメッセージ本文として通知を作成する方法に関する具体的なチュートリアルを見つけることができませんでした。これを行うにはPHPとmySQLを使用する必要がありますか?それとも、JAVAだけを使って行うことができますか?AndroidのFirebaseリアルタイムデータベーストリガープッシュ通知

+0

juat 5回のクリックやコードにはほとんど変化はセットアップFCMに必要とされています。私はあなたが段階的なセットアップの手順についてウェブサイトを再度チェックすることをお勧めします –

答えて

4

コメントする担当者がいないので、ここに記入してください。

Firebaseが最近Firebase Functionsをリリースしました。

機能は、Firebaseプラットフォームを統合して、イベントに応答するコードを作成し、他のFirebase機能によって公開されている機能を呼び出すことができます。

あなたのユーザーのうちの1人が別のユーザーに従うときに通知を送信するという問題は、Firebase機能の使用例の1つです。 あなたはそれをチェックアウトすることができますhere

+0

フランクに感謝 – TrueKojo

+0

ありがとうTrueKojo!私は、クラウド機能を使用してフォロワープッシュ通知を実装しました。しかし、1つのデバイスで異なるユーザーに異なるトークンを生成する考えはありますか? – Henry

+0

私は調査する必要があります。私の最初の傾向は、Firebase認証フローからのユーザの一意のIDを使用することです。 – TrueKojo

2

はい、デバイスから別のデバイスに通知を送信するには、アプリサーバーを作成する必要があります。あなたのアプリケーションサーバーは、FirebaseベースのFCMのAPIと、Firebaseデータベースのサービスアカウントを持ちます。

次にnode.jsコードを示します。関数listenForNotifications()は、送信したいときにいつでもフォローリクエストを行うことができるように、データベースに接続されたリスナーです。アプリケーションのフォローボタンをクリックすると、データベースの「フォロー」ルートノードにエントリが追加されます。次に、エントリがあるので、モバイルアプリからエントリが追加されると、request.on( "child_added" ..)が起動します。次に、トークンを介して要求を送信する相手にメッセージをルーティングします。すなわちノードを「後」のrequest.requestToToken

データベース構造:

+--Root 
+-. 
+--. 
+----Following 
+---------pushKey /auto-generated 
+----------------requestToToken /token of device you want to send notification 
+---------------- requestFromToken/token of device that sent the notification 

    var firebase = require('firebase-admin'); 
    var request = require('request'); 
     const express = require('express'); 
     const app = express(); 

     app.get('/', (req, res) => { 
      res.status(200).send('Hello, world!'); 
     }); 

     // Start the server 
     const PORT = process.env.PORT || 8080; 
     app.listen(PORT,() => { 
      console.log(`App listening on port ${PORT}`); 
      console.log('Press Ctrl+C to quit.'); 
     }); 

     var API_KEY = ".......your key"; // Your Firebase Cloud Messaging Server API 
     // Fetch the service account key JSON file contents 
     var serviceAccount = require("....your database service account.json"); 
     // Initialize the app with a service account, granting admin privileges 
     firebase.initializeApp({ 
      credential: firebase.credential.cert(serviceAccount), 
      databaseURL: "https://dropit-b357a.firebaseio.com" 
     }); 
     ref = firebase.database().ref(); 
     process.stdout.write("I AM HERE... SERVER RUNNING MAYBE: "); 


     function listenForNotificationRequests() { 

      var requests = ref.child('Following'); 
      requests.on('child_added', function(requestSnapshot) { 
      var request = requestSnapshot.val(); 
      sendNotificationToUser(
       request.requestToToken, 
       request.requestFrom, 
       function() { 
       return; 
       } 
      ); 
      }, function(error) { 
      console.error(error); 
      }); 
     }; 

     function sendNotificationToUser(username, message, onSuccess) { 
      request({ 
      url: 'https://fcm.googleapis.com/fcm/send', 
      method: 'POST', 
      headers: { 
       'Content-Type' :' application/json', 
       'Authorization': 'key='+API_KEY 
      }, 
      body: JSON.stringify({ 
       notification: { 
       title: message 
       }, 
       to : username 
      }) 
      }, function(error, response, body) { 
      if (error) { console.error(error); } 
      else if (response.statusCode >= 400) { 
       console.error('HTTP Error: '+response.statusCode+' '+response.statusMessage); 
      } 
      else { 
       onSuccess(); 
      } 
      }); 
     } 

     // start listening 
     listenForNotificationRequests(); 
+1

* firebaser here *実際には、アプリサーバーの役割を果たすことができる[Cloud Base for Firebase](https://firebase.google.com/docs/functions)をリリースしました。このサンプルを見てください:https://github.com/firebase/functions-samples/tree/master/fcm-notifications。 –

+0

お返事ありがとうございました。しかし、私は同じアクションを実行するためにクラウド機能を使用することを選択しました、そして、それはより簡単です! – Henry