Skip to content

実装

AudioRecognition instanceの作成

SORIアプリケーション認証情報を使ってSORIAudioRecognizerを作成します。実際の認証情報を公開ソースコードにハードコードしないでください。リリース設定、セキュアストレージ、環境ごとのビルドプロセスを通じて読み込んでください。

次の例では、ソースコードに機密値が残らないように--dart-define値を使用します。

dart
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環境から値を渡してアプリを実行します。

bash
flutter run \
  --dart-define=SORI_APP_ID=your-application-id \
  --dart-define=SORI_SECRET_KEY=your-secret-key

WARNING

app_idsecret_keyは、アプリをSORI API Serverで認証するための値です。実際の値をリポジトリ、サンプルアプリ、Issue、スクリーンショット、公開ドキュメントにコミットしないでください。

認識イベントの受信

認識を開始する前にrecognizer.eventsを購読します。キャンペーン情報は、ネイティブプラットフォームイベントに応じてevent.campaignまたはイベントpayloadから取得できます。

dart
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をキャンセルします。

dart
await subscription?.cancel();

認識の開始と停止

recognizerの設定が完了し、UIがイベントを受け取る準備ができたら、startRecognition()を呼び出します。

dart
await recognizer.startRecognition(
  notification: const SORIAndroidNotificationOptions(
    title: 'SORI recognition',
    body: 'Listening for SORI audio signals',
  ),
);

notificationオプションはAndroidのforeground-service通知で使用されます。iOSでは無視されます。

認識を停止するには、次を呼び出します。

dart
await recognizer.stopRecognition();

現在のrecorder状態も確認できます。

dart
final isRunning = await recognizer.isRecorderRunning();

キャンペーンアクションの処理

キャンペーンにaction URLがある場合、まずアプリ側でそのURLを開くかどうかを判断します。アプリがURLを受け入れた後、handleActionUrl()を呼び出すと、SDKを通じてインタラクションがレポートされ処理されます。

dart
final actionUrl = campaign.actionUrl;
if (actionUrl != null && actionUrl.isNotEmpty) {
  await recognizer.handleActionUrl(actionUrl);
}

認識データベースの更新

SDKは、ネイティブrecognizerにローカル認識データベースの更新をリクエストできます。

dart
final result = await recognizer.updateDatabase();

if (!result.success) {
  // result.errorMessageを確認し、必要に応じて再試行オプションを表示します。
}