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

Twilio Syncで作ったみた

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

Twilio Syncで作ったみた

Avatar for Akihiro NAGASHIMA

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単位ではないため) 使い所や権限設定に注意が必要