Setting the encryption secret
エンドツーエンドの暗号化セッションは、サーバーAPIを使用して作成されます。 REST API).
クライアントがパブリッシュまたはサブスクライブする前に [OTSession setEncryptionSecret:error:] メソッドを使用する:
OTError *error = nil;
[_session setEncryptionSecret:@"encryption-secret" error:&error];
if (error)
{
// Notify the user.
}
有効な秘密は8文字以上256文字以下の文字列である。シークレットを変更するには Session.setEncryptionSecret() メソッドをもう一度。
無効なシークレットを設定すると InvalidEncryptionSecret エラー。
Events and errors
イベントとエラーは、ユーザー主導の暗号化の動作を管理するために不可欠である。エンドツーエンドの暗号化は、共有秘密モデルを使用します。セッション内の全員が、自分のメディアを暗号化し、他の全員のメディアを復号化するために、同じ秘密を使用することが期待されています。
クライアントがエンドツーエンドで暗号化されたセッションに接続しようとし、接続前に暗号化シークレットを設定しなかった場合、次のコードが設定されたエラーが発生する。 EncryptionSecretMissing:
OTError *error = nil;
[_session connectWithToken:kToken error:&error];
if (error && (error.code == EncryptionSecretMissing))
{
// Notify the user of the error connecting.
}
暗号化シークレットを指定せずにエンドツーエンドで暗号化されたセッションを公開しようとした場合、次のように呼び出す。 [OTSession publish:error:] メソッドの結果は、エラーコードが OTPublisherEncryptionSecretMissing.最高のユーザーエクスペリエンスのために、アプリケーションは公開前にユーザーが提供した秘密を検証すべきである:
OTError *error = nil;
[_session publish:_publisher error:&error];
if (error && (error.code == OTPublisherEncryptionSecretMissing))
{
// The application should communicate that the secret was not set.
}
不正確な暗号化シークレットのために、加入者がストリームのメディアをデコードできない場合は [OTSubscriberKitDelegate subscriber:didFailWithError:] メッセージは、コードがErrorCode.EncryptionSecretMismatchに設定されたエラーとともに送信される。接続障害やオーディオ/ビデオの問題ではなく、暗号化の不一致によってメディアが受信できないことをユーザーに伝えることが重要です:
// Implementation of [OTSubscriberKitDelegate subscriber:didFailWithError:]:
- (void)subscriber:(OTSubscriberKit*)subscriber
didFailWithError:(OTError*)error
{
if (error && (error.code == EncryptionSecretMismatch)) {
// Activate a UI element communicating that there's been an encryption secret mismatch.
}
}
[_session subscribe:_subscriber error:&error];
// ...
サブスクライバーがパケットを復号化する際に内部エラーが発生した場合 [OTSubscriberKitDelegate subscriber:didFailWithError:] メッセージが送信される。 OTSubscriberDecryptionInternalError.