セッションの設定
セッションとは、クライアントアプリとVonage APIとの間の認証済み接続のことです。バックエンドがJWTを発行し、Client SDKはそのJWTを使用して createSession().
セッションモデル
- Vonage API はセッションのライフサイクルを管理します。
- Client SDK は JWT を発行せず、トークンの発行も管理しません。
- バックエンドは、引き続きIDおよびアクセスポリシーにおける「真実の源」となります。
認証フロー
バックエンドでのJWTの発行
以下の例は、必要なJWTの構造を示しています。実際の実装は、バックエンドの言語やフレームワークによって異なります。
JWTはサーバー側で生成する必要があります。具体的な実装方法はアプリケーションによって異なります。
const privateKeyPem =
'-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----';
const payload: GuideJwtPayload = {
application_id: applicationId,
sub: userName,
acl: {
paths: {
'/*/users/**': {},
'/*/conversations/**': {},
'/*/sessions/**': {},
'/*/devices/**': {},
'/*/image/**': {},
'/*/media/**': {},
'/*/applications/**': {}
}
},
exp: Math.floor(Date.now() / 1000) + 60 * 60
};
const jwt = signJwt(payload, privateKeyPem);
console.log(jwt);
セッションの作成
client.setConfig({ region: ConfigRegion.EU });
try {
const sessionId = await client.createSession(jwt);
console.log(`Session created: ${sessionId}`);
} catch (error) {
console.error('Failed to create session', error);
}
val client = VoiceClient(ctx)
val config = VGClientConfig(VGConfigRegion.EU)
client.setConfig(config)
client.createSession(jwt) { error, sessionId ->
if (error != null) {
println("Failed to create session: $error")
return@createSession
}
println("Session created: $sessionId")
}
VoiceClient client = VoiceClient.createClient(ctx);
VGClientConfig config = new VGClientConfig(ClientConfigRegion.EU);
client.setConfig(config);
client.createSession(jwt, null, (error, sessionId) -> {
if (error != null) {
System.out.println("Failed to create session: " + error);
return null;
}
System.out.println("Session created: " + sessionId);
return null;
});
let config = VGClientConfig(region: .EU)
client.setConfig(config)
client.createSession(jwt) { error, sessionId in
guard error == nil, let sessionId = sessionId else {
print("Failed to create session: \(error?.localizedDescription ?? "unknown")")
return
}
print("Session created: \(sessionId)")
}
VGClientConfig *config = [[VGClientConfig alloc] initWithRegion:VGConfigRegionEU];
[client setConfig:config];
[client createSession:jwt callback:^(NSError * _Nullable error, NSString * _Nullable sessionId) {
if (error != nil || sessionId == nil) {
NSLog(@"Failed to create session: %@", error);
return;
}
NSLog(@"Session created: %@", sessionId);
}];
セッションの有効期間
セッションは、 createSession() が有効です。セッションの有効期間は、JWTの exp claim — その有効期間はバックエンドによって制御されます(最短30秒、最長24時間、明示的に設定されていない場合はデフォルトで15分)。SDK自体ではセッションのTTLを一切制限しません。
JWTの有効期限が切れる前にセッションを延長するには、以下を呼び出します。 refreshSession(jwt) 新しいJWTを使用して。多くの顧客は、有効期間が短い(15分)JWTを発行し、バックエンドから約10分ごとに更新しています。
一時的な接続切断後の再接続
何らかの理由(ネットワーク切断、アプリのサスペンド、タブの閉じなど)でWebSocketが切断された場合、バックエンドはセッションを「切断済み」としてマークしますが、約 15分 これにより、クライアントは再接続できるようになります。その期間中は:
- 電話
refreshSession(jwt)SDKの状態がまだ残っている場合(SDKは内部でセッションIDを追跡しています)。 - またはお電話ください
createSession(jwt, existingSessionId)SDKの状態が失われた場合(アプリの再起動など)でも、セッションIDを自分で保持しておいた場合。
どちらの場合も、バックエンドは接続が切断されていた間に届いたイベント(着信招待など)をすべて再生するため、顧客は再接続の間に着信した電話に応答することができます。
再接続が行われないまま約15分が経過すると、セッションは削除されるため、以下の関数を呼び出す必要があります。 createSession(jwt) 新しいJWTを使用して、新たなセッションを開始します。
参照 Vonage Client SDK のセッション セッションのライフサイクルに関する詳細については、こちらをご覧ください。
セッションのTTL(15分)およびJWTの有効期限(exp (クレーム)は独立しています。JWTの有効期間は15分を超えることもありますが、リフレッシュされない限り、セッションは15分後に期限切れとなります。TTLが切れる前に、必ずセッションをリフレッシュするか、新たに作成してください。
エラー処理
createSession 失敗する原因はいくつか考えられます。必ずエラーコールバックを処理してください:
try {
const sessionId = await client.createSession(token);
console.log("Session created:", sessionId);
} catch (error) {
// error is a VonageError with type and message
console.error("Session creation failed:", error.type, error.message);
}
client.createSession(token) { error, sessionId ->
if (error != null) {
when {
error.message?.contains("token") == true ->
// Invalid or expired JWT — request a new one from your backend
println("Token error: $error")
error.message?.contains("already active") == true ->
// Session already exists — call deleteSession first if you need a fresh session
println("Session already active")
else ->
println("Session creation failed: $error")
}
} else {
println("Session created: $sessionId")
}
}
client.createSession(token) { error, sessionId in
if let error = error {
print("Session creation failed: \(error.localizedDescription)")
return
}
print("Session created: \(sessionId ?? "")")
}
発生しうるエラーの種類の一覧については、以下を参照してください。 エラー.