Node.js
バックエンドとの接続
UIとバックエンド・エンドポイントの統合
前のモジュールでは、UIと小さなUIステートマシン(VerifyUiState).では、そのUIをバックエンドに接続しよう。
主なアイデアは、AndroidアプリがVonageを直接呼び出すことはないということです。あなたのバックエンドを呼び出すだけです:
POST /verification検証フローを開始するPOST /check-codeコードを検証する(今のところSMSコード)POST /nextフォールバック・チャンネル(SMS)を即座に強制する(20秒待たないため)
まずは実装から始めよう!
検証開始POST /verification)
ユーザーが 検証開始:
アプリは電話番号を
/verificationバックエンドが返す:
request_id(いつも)check_url(オプション。後でサイレント認証に使用する)
このセクションでは、Silent Authをスキップして、すぐにSMSへのフォールバックを要求する。
/nextUIはSMS画面(
EnterSms(requestId))
private suspend fun startVerification(phone: String): Pair<String, String?> = withContext(Dispatchers.IO) {
val client = OkHttpClient()
val json = Gson().toJson(mapOf("phone" to phone))
val requestBody = json.toRequestBody("application/json".toMediaType())
val request = Request.Builder()
.url("$BACKEND_URL/verification")
.post(requestBody)
.build()
val response = client.newCall(request).execute()
if (!response.isSuccessful) {
val errorBody = response.body?.string() ?: "Unknown error"
throw IOException("Start verification failed: HTTP ${response.code} - $errorBody")
}
val body = response.body?.string() ?: throw IOException("Empty response body")
val jsonBody = Gson().fromJson(body, JsonObject::class.java)
val requestId = jsonBody.get("request_id")?.asString ?: throw IOException("Missing request_id")
val checkUrl = jsonBody.get("check_url")?.asString // may be null
Pair(requestId, checkUrl)
}
SMSコードを送信するPOST /check-code)
ユーザーが 投稿コード:
- アプリが送信する
{ request_id, code }への/check-code - バックエンドは次のように応答します。
{ verified: true/false } - UIは成功または "無効なコード "を表示する
private suspend fun submitCode(requestId: String, code: String): CheckCodeResponse = withContext(Dispatchers.IO) {
val client = OkHttpClient()
val json = Gson().toJson(mapOf("request_id" to requestId, "code" to code))
val requestBody = json.toRequestBody("application/json".toMediaType())
val request = Request.Builder()
.url("$BACKEND_URL/check-code")
.post(requestBody)
.build()
val response = client.newCall(request).execute()
if (!response.isSuccessful) {
val errorBody = response.body?.string() ?: "Unknown error"
throw IOException("Check code failed: HTTP ${response.code} - $errorBody")
}
val body = response.body?.string() ?: throw IOException("Empty response body")
val jsonBody = Gson().fromJson(body, JsonObject::class.java)
CheckCodeResponse(
verified = jsonBody.get("verified")?.asBoolean ?: false,
status = jsonBody.get("status")?.asString
)
}
フォールバックを素早く強制するPOST /next)
呼び出し /next は "正しさ "の観点からはオプションだが(Vonageは自動的にフォールバックする)、UXの観点からは非常に有用だ:
サイレント認証が完了しない(あるいはまだ実装していない)ことがすでに分かっている場合、次のように呼び出す。 /next Silent Authのタイムアウトを待たずに済む。
private suspend fun requestNextWorkflow(requestId: String): Unit = withContext(Dispatchers.IO) {
val client = OkHttpClient()
val json = Gson().toJson(mapOf("requestId" to requestId))
val requestBody = json.toRequestBody("application/json".toMediaType())
val request = Request.Builder()
.url("$BACKEND_URL/next")
.post(requestBody)
.build()
val response = client.newCall(request).execute()
if (!response.isSuccessful) {
val errorBody = response.body?.string() ?: "Unknown error"
throw IOException("Next workflow failed: HTTP ${response.code} - $errorBody")
}
}
サイレント認証を始める
サイレント認証を理解するにはかなりの時間がかかる。このチュートリアルでは、NodejsとKotlinを使って統合をゼロから構築する方法を紹介する。
以下の言語で利用可能:
手順
1
はじめに2
バックエンドの前提条件3
環境を整える4
Vonage認証情報の設定5
Vonage Verify APIをバックエンドに追加する。6
バックエンドのテスト7
モバイルアプリの前提条件8
環境を整える9
基本的なAndroidアプリケーションを作成する10
バックエンドとの接続11
Vonage Client SDKを使用します。12
テスト環境のセットアップ13
実装をテストする