💬

【Flutter】Reviewの表示の実装例(表示タイミングも考慮して)

2025/03/08に公開

Review を実装する方法

アプリのレビューは、アプリの評価や改善点を把握するための重要な要素です。アプリでレビュー機能を実装する方法について、コード例を交えながら説明します。

実装例

Simulator Screen Recording - iPhone 16 Pro Max - 2025-02-05 at 17.46.35.gif

ライブラリ

https://pub.dev/packages/in_app_review

基本的なレビューダイアログの表示

最もシンプルな実装方法として、基本的なレビューダイアログを表示する機能があります。

// 基本的なレビューダイアログを表示する機能
Future<void> showBasicReview() async {
  try {
    if (await _inAppReview.isAvailable()) {
      await _inAppReview.requestReview();
    }
  } catch (e) {
    print('基本的なレビュー表示でエラーが発生: $e');
  }
}

条件付きレビューの実装

ユーザー体験を考慮して、特定の条件下でのみレビューを表示することを個人的におすすめします。以下は、アプリ初回起動から 7 日後にレビューを表示する実装例です。

// 初回起動から7日後にレビューを表示する実装
Future<void> showConditionalReview() async {
  try {
    final prefs = await SharedPreferences.getInstance();
    final firstLaunch = prefs.getInt(_firstLaunchKey) ?? 0;
    final now = DateTime.now().millisecondsSinceEpoch;
    final sevenDaysInMillis = 7 * 24 * 60 * 60 * 1000;

    // 初回起動時のタイムスタンプを保存
    if (firstLaunch == 0) {
      await prefs.setInt(_firstLaunchKey, now);
    }

    // 7日経過後の条件チェック
    if (now - firstLaunch >= sevenDaysInMillis) {
      if (await _inAppReview.isAvailable()) {
        await _inAppReview.requestReview();
      }
    }
  } catch (e) {
    print('条件付きレビュー表示でエラーが発生: $e');
  }
}
エポック秒とは?

「1970 年 1 月 1 日午前 0 時 0 分 1 秒」だったら「1」のように、UTC で「1970 年 1 月 1 日午前 0 時 0 分 0 秒」を基準にして、そこからの経過秒数で日時を表現するやり方(で表現した日時)のこと

面白いですね。「1970 年 1 月 1 日午前 0 時 0 分 0 秒」を 0 としてそこから経過した秒数を数字で表すことができる概念の存在を知らなかったです。

https://wa3.i-3-i.info/word18476.html

回数制限付きレビューの実装

起動回数をカウントすることで、特定の条件を満たしたユーザーのみレビューを表示するときに便利です。

// レビュー要求回数を制限する実装
Future<void> showLimitedReview() async {
  try {
    final prefs = await SharedPreferences.getInstance();
    final requestCount = prefs.getInt(_reviewRequestCountKey) ?? 0;
    await prefs.setInt(_reviewRequestCountKey, requestCount + 1);

    // 3回目までは制限し、それ以降は表示
    if (await _inAppReview.isAvailable()) {
      if (requestCount > 3) {
        await _inAppReview.requestReview();
      }
    }
  } catch (e) {
    print('回数制限付きレビュー表示でエラーが発生: $e');
  }
}

ストアページへの直接遷移

特定のケースでは、ストアページに直接ユーザーを誘導することも有効です。

// ストアページを直接開く実装
Future<void> openStorePage() async {
  try {
    await _inAppReview.openStoreListing(
      appStoreId: 'YOUR_APP_STORE_ID',
    );
  } catch (e) {
    print('ストアページを開く際にエラーが発生: $e');
  }
}

サンプルコード

https://github.com/muranakar/review_sample

以上です。

Discussion