Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Twilio Syncで作ったみた

Twilio Syncで作ったみた

Akihiro NAGASHIMA

August 31, 2016
Tweet

More Decks by Akihiro NAGASHIMA

Other Decks in Technology

Transcript

  1. 同期どうする問題 そこで Twilio Sync!! • ポーリング? • 即時じゃないしダサいよねー • Webソケット?

    • 即時だけどサーバの用意とメンテが・・・ • IP Messaging? • やれなくないけどちょっと用途違うよね
  2. Syncを使う流れ 1. APIキーとシークレットの作成(管理画面から) 2. サービスインスタンスの作成(curlとかでやる) 3. 上記で得た情報を元にトークンを生成(サーバサイド) 4. 生成したトークンでクライアント初期化 identity

    = params[:identity] endpoint_id = "Consultation:#{params[:identity]}:#{params[:device_id]}" token = Twilio::Util::AccessToken.new( ENV["TWILIO_ACCOUNT_SID"], ENV["TWILIO_API_KEY"], ENV["TWILIO_API_SECRET"], 3600, identity ) grant = Twilio::Util::AccessToken::SyncGrant.new grant.service_sid = ENV["TWILIO_SYNC_SERVICE_SID"] grant.endpoint_id = endpoint_id token.add_grant(grant) Identity: ユーザを特定する Endpoint: デバイス(画面)を特定する
  3. Syncを使う流れ accessManager = new Twilio.AccessManager(token); syncClient = new Twilio.Sync.Client(accessManager); syncClient.map("consultation.members").then(function(map)

    { _syncMap = map; _consultant.changeStatus("待受中"); updateOnlineConsultantsView(); $.each(["itemUpdated", "itemAdded", "itemRemoved"], function(index, action) { _syncMap.on(action, function() { updateOnlineConsultantsView(); }); }); }); _syncMap.set(this.identity, {status: this.status, topic: this.topic});
  4. DEMOアプリの問題点 Members(MapObject) { User1: {status: 待受中}, User2: {status: 通話中} }

    権限はオブジェクト単位 UserにWrite権限をつけてしまうと、 User1はUser2の情報を更新できてしまう (KEY単位ではないため) 使い所や権限設定に注意が必要