実装
AudioRecognition instanceの作成
SORIアプリケーション認証情報を使ってSORIAudioRecognizerを作成します。実際の認証情報を公開ソースコードにハードコードしないでください。リリース設定、セキュアストレージ、環境ごとのビルドプロセスを通じて読み込んでください。
次の例では、ソースコードに機密値が残らないように--dart-define値を使用します。
import 'package:sorisdk_flutter/sorisdk_flutter.dart';
const applicationId = String.fromEnvironment('SORI_APP_ID');
const secretKey = String.fromEnvironment('SORI_SECRET_KEY');
final recognizer = SORIAudioRecognizer(
applicationId: applicationId,
secretKey: secretKey,
);
await recognizer.configure();ローカルまたはCI環境から値を渡してアプリを実行します。
flutter run \
--dart-define=SORI_APP_ID=your-application-id \
--dart-define=SORI_SECRET_KEY=your-secret-keyWARNING
app_idとsecret_keyは、アプリをSORI API Serverで認証するための値です。実際の値をリポジトリ、サンプルアプリ、Issue、スクリーンショット、公開ドキュメントにコミットしないでください。
認識イベントの受信
認識を開始する前にrecognizer.eventsを購読します。キャンペーン情報は、ネイティブプラットフォームイベントに応じてevent.campaignまたはイベントpayloadから取得できます。
import 'dart:async';
import 'package:sorisdk_flutter/sorisdk_flutter.dart';
late final SORIAudioRecognizer recognizer;
StreamSubscription<SORIRecognitionEvent>? subscription;
subscription = recognizer.events.listen((event) {
if (event.type == SORIRecognitionEventType.stateChanged) {
final state = event.payload['state'];
// STARTING、STARTED、stoppedの状態に合わせてUIを更新します。
}
final campaign = event.campaign;
if (campaign != null) {
// campaign.name、campaign.imageUrl、campaign.actionUrlを表示します。
}
if (event.type == SORIRecognitionEventType.error ||
event.type == SORIRecognitionEventType.networkError) {
// アプリのエラーUIにevent.messageを表示します。
}
});ウィジェットまたはアプリケーションscopeが破棄されるときにsubscriptionをキャンセルします。
await subscription?.cancel();認識の開始と停止
recognizerの設定が完了し、UIがイベントを受け取る準備ができたら、startRecognition()を呼び出します。
await recognizer.startRecognition(
notification: const SORIAndroidNotificationOptions(
title: 'SORI recognition',
body: 'Listening for SORI audio signals',
),
);notificationオプションはAndroidのforeground-service通知で使用されます。iOSでは無視されます。
認識を停止するには、次を呼び出します。
await recognizer.stopRecognition();現在のrecorder状態も確認できます。
final isRunning = await recognizer.isRecorderRunning();キャンペーンアクションの処理
キャンペーンにaction URLがある場合、まずアプリ側でそのURLを開くかどうかを判断します。アプリがURLを受け入れた後、handleActionUrl()を呼び出すと、SDKを通じてインタラクションがレポートされ処理されます。
final actionUrl = campaign.actionUrl;
if (actionUrl != null && actionUrl.isNotEmpty) {
await recognizer.handleActionUrl(actionUrl);
}認識データベースの更新
SDKは、ネイティブrecognizerにローカル認識データベースの更新をリクエストできます。
final result = await recognizer.updateDatabase();
if (!result.success) {
// result.errorMessageを確認し、必要に応じて再試行オプションを表示します。
}