Sinch を ROR Web アプリケーションに統合しようとしていますが、signedUserToken をフォーマットして sinchClient を開始するのに苦労しています。Haml を使用した私の見解は次のとおりです。
#{@signedUserTicket}
%script{src: "//cdn.sinch.com/latest/sinch.min.js", type: "text/javascript"}
= javascript_tag do
$(function(){
$sinchClient = new SinchClient({
applicationKey: 'APP_KEY',
capabilities: {messaging: true, calling: true},
supportActiveConnection: true,
onLogMessage: function(message) {
console.log(message);
},
});
$sinchClient.start({
'userTicket' : "#{@signedUserTicket}",
});
});
そして、コントローラーで何をしようとしても、成功に最も近いのは次のとおりです。
DOMException [InvalidCharacterError: "String contains an invalid character"
code: 5
nsresult: 0x80530005
location: http://cdn.sinch.com/latest/sinch.min.js:5]
少しでも助けていただければ幸いです。また、適切な情報を入手して時間を割くことができれば、Rails に Sinch を統合するための Rubygem を作成することもできます。
乾杯、ジェームズ
編集 :
私はいくつかの変更を試みましたが、近づいています(と思います)。InvalidCharacter の問題は、Javascript では明らかにうまくデコードされない末尾の '=' から発生しました。
私の新しいコントローラーは次のとおりです。
class SinchController < ApplicationController
skip_before_filter :verify_authenticity_token
before_filter :authenticate_user!
def client
username = current_user.username
applicationKey = "APP_KEY"
applicationSecret = "APP_SECRET_B64"
userTicket = {
"identity" => {"type" => "username", "endpoint" => username},
"expiresIn" => 3600,
"applicationKey" => applicationKey,
"created" => Time.now.utc.iso8601
}
userTicketJson = userTicket.to_json
userTicketBase64 = Base64.strict_encode64(userTicketJson).chop
digest = Digest::HMAC.digest(Base64.decode64(applicationSecret), userTicketJson, Digest::SHA256)
signature = Base64.strict_encode64(digest).chop
@signedUserTicket = (userTicketBase64 + ':' + signature).remove('=')
end
end
しかし今、私は次のエラーに直面しています:
POST https://api.sinch.com/v1/instance 500 (内部サーバー エラー) client:1 XMLHttpRequest はhttps://api.sinch.com/v1/instanceを読み込めません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン 'http:// localhost:3000' へのアクセスは許可されません。応答の HTTP ステータス コードは 500 でした。
(localhost の前のスペースは、SO の新しいユーザー制限によるものです)
Rack::Cors を Rails サーバーに追加して、クロスドメイン リクエストが自分のリクエストから来た場合に備えて許可しようとしましたが、どのような構成を試しても、リクエストに正しいヘッダーが含まれていないようです。CORS リクエストを誤解していますか? 問題は sinch.min.js によって生成されたリクエストから来ていますか?
よろしく、ジェームズ