2016-04-05 17 views
3

Firebaseを使用してモバイルアプリケーションを開発しています。モバイルアプリでは、Whatsappと同様の携帯電話番号に基づいてユーザーを登録する必要があります。私は、Nexmoを使ってユーザーの携帯電話番号を確認するつもりです。番号の確認には2つのステップがあります。firebase-queueを使用してタスクの結果を返します。

  1. NexmoのAPIへのユーザーの携帯番号を送信し、それが成功した場合にREQUEST_IDに戻ると、それはまた、SMS
  2. を介してユーザの携帯電話にコードを送信し確認するためにNexmoにコードとREQUEST_IDを送ります番号

これらのタスクを実行するためにfirebase-queueを使用したいと思います。私は、タスクの結果をクライアントに返す方法があるかどうか尋ねたいと思う。 firebase-queueのドキュメントでそのような例は見つかりませんでした。基本的には、モバイル番号をNexmo APIに送信するタスクを追加して、応答してrequest_idを取得して、別のタスクを追加してユーザーが入力したコードを確認できるようにしたいとします。

答えて

7

クライアントに応答を返す方法は間違いありません。私たちは、Flashlight search integrationのそれの良い例があります。

function doSearch(index, type, query) { 
     var ref = new Firebase(URL+'/search'); 
     var key = ref.child('request').push({ index: index, type: type, query: query }).key(); 
     console.log('search', key, { index: index, type: type, query: query }); 
     ref.child('response/'+key).on('value', showResults); 
    } 

このコードは、クライアント側のJavaScriptアプリケーションで実行され、push()を呼び出す行にサーバに検索語を送信します。次に、関数の最後の行に戻ってくる応答を待つ。ここで重要な点は、要求を送信するために使用したsam push id/keyを使用して応答をリッスンすることです。こうすることで、要求と応答が一致します。

Firebase Queueには、このような "ハンドシェイク"のサポートが組み込まれていませんが、アプリケーションのクライアントコードとサーバーコードに簡単に組み込むことができます。タスクを追加すると、あなたがリクエストID(the firebase-queue sampleからアダプタ)を追加:あなたのタスクワーカーで

var request_id = ref.push().key(); 
ref.child('queue/tasks').push({ requestId: request_id, foo: 'bar' }); 

を、あなたはあなたの通常の処理を実行し、同じ要求IDを持つデータベース(アダプタに戻すレスポンスを書きfirebase-queue sampleから):

var ref = new Firebase('https://<your-firebase>.firebaseio.com/queue'); 
var responses = new Firebase('https://<your-firebase>.firebaseio.com/responses'); 
var queue = new Queue(ref, function(data, progress, resolve, reject) { 
    // Read and process task data 
    console.log(data); 

    // Do some work 
    progress(50); 

    // Finish the task asynchronously 
    setTimeout(function() { 
    // write the response to the client 
    responses.child(data.requestId).set({ allDone: true }); 
    // tell firebase-queue that we're done 
    resolve(); 
    }, 1000); 
}); 
+0

お返事ありがとうございます。結果を渡すために私自身のロジックを書かなければならないと思っていましたが、/ respond/の結果を公開するヒントはきちんとしています。 –

+0

"ref.child( 'レスポンス/' +キー).on( 'value'、showResults);" "ref.child( 'responses /' + key).on( 'value'、showResults);"コードの残りの部分と一致するようにします。 「応答」ではなく「応答」に注目してください。これは主に将来の読者のために、これを動作させるためのものです。 –

+0

私はこのソリューションを実装しましたが、それは私には不思議に思えます。すべてのレスポンスノードはどうなりますか?誰がそれらを削除しますか?クライアントから削除する必要がありますか?クライアントに応答ノードへの読み取り/書き込みアクセス権を与えた場合、クライアントが聴くことができる前に、彼は何とか挿入物を聞き取り、削除することができますか? – Tom

2

オブジェクトにrequestIdを書き込む必要はありません。代わりに、次のコードを使用して応答を返すことができます。私はそれが少しきれいだと思う。

クライアント側: ref.child( 'queue/tasks')。push({foo: 'bar'});

トリックは、入力をサニタイズしないことです。サーバー側:

var options = {sanitize:false}; 

queue = new Queue(firebaseQueueRef, options , function(request, progress, resolve, reject){ 
    //do some work 
    setTimeout(function(){ 
    resposeRef.child(request._id).set(myResponse); 
    resolve(); 
    } 
}); 
+0

私はあなたがそこで何をしたかを見ます!クリーン! – kirtan403

関連する問題