Google 致力于为黑人社区推动种族平等。查看具体举措

集成应用内评价(原生)

本指南介绍如何使用原生(C 或 C++)代码将应用内评价集成到您的应用中。如果您使用的是 Kotlin 或 Java 或者 Unity,请参阅单独的集成指南。

原生 SDK 概览

Play Core 原生 SDK 是 Play Core SDK 系列的一部分。Play Core 原生 SDK 包含一个 C 头文件 review.h,用于封装来自 Java Play Core SDK 的 ReviewManager。此头文件允许您的应用直接从原生代码调用 API。如需简要了解可用的公共函数,请参阅 Play Review 原生模块文档

ReviewManager_requestReviewFlow 会启动一个请求,用于收集稍后启动应用内评价流程所需的信息。您可以使用 ReviewManager_getReviewStatus 跟踪请求的结果。如需详细了解 ReviewManager_getReviewStatus 可以返回的所有状态,请参阅 ReviewErrorCode

如果函数运行成功,则请求函数和启动函数都会返回 REVIEW_NO_ERROR

设置您的开发环境

如需设置您的开发环境,请按照 Play Core 库指南的原生代码部分中的设置说明进行操作。

添加 review.h

将 Play Core 原生 SDK 集成到您的项目中之后,请在将包含 API 调用的文件中添加以下代码行:

#include "play/review.h"

初始化 Review API

每当您要使用该 API 时,都必须先调用 ReviewManager_init 函数来对其进行初始化,如下面使用 android_native_app_glue.h 构建的示例所示:

void android_main(android_app* app) {
  app->onInputEvent = HandleInputEvent;

  ReviewErrorCode error_code = ReviewManager_init(app->activity->vm, app->activity->clazz);
  if (error_code == REVIEW_NO_ERROR) {
    // You can use the API.
  }
}

请求应用内评价流程

请遵循有关何时请求应用内评价的指南,确定在应用的用户流中的哪些时间点适合提示用户进行评价(例如,用户在游戏中的某一关结束时关闭摘要屏幕后)。当您的应用接近其中某个时间点时,调用 ReviewManager_requestReviewFlow 以异步请求您的应用启动应用内评价流程所需的信息。您可以调用 ReviewManager_getReviewStatus 来监控 ReviewManager_requestReviewFlow 操作的进度,例如每帧一次。此过程最多可能需要几秒钟的时间,因此您应在您的应用到达您希望显示应用内评价流程的时间点之前开始此过程。

ReviewErrorCode error_code = ReviewManager_requestReviewFlow();
if (error_code == REVIEW_NO_ERROR) {
    // The request has successfully started, check the status using
    // ReviewManager_getReviewStatus.
}

处理状态并启动应用内评价流程

每当开始了请求或启动了应用内评价流程,您都可以使用 ReviewManager_getReviewStatus 检查状态。这样一来,您就可以根据 API 状态定义逻辑。实现这一目标的一种方法是,将状态保持为全局变量,并在用户执行某项操作(例如,在游戏中点按“下一关”按钮)时检查状态是否为 REVIEW_REQUEST_FLOW_COMPLETED,如以下示例所示:

ReviewStatus status;
ReviewErrorCode error_code = ReviewManager_getReviewStatus(&status);
if (error_code != REVIEW_NO_ERROR) {
    // There was an error with the most recent operation.
    return;
}

switch (status) {
    case REVIEW_REQUEST_FLOW_PENDING:
        // Request is ongoing. The flow can't be launched yet.
        break;
    case REVIEW_REQUEST_FLOW_COMPLETED:
        // Request completed. The flow can be launched now.
        break;
    case REVIEW_LAUNCH_FLOW_PENDING:
        // The review flow is ongoing, meaning the dialog might be displayed.
        break;
    case REVIEW_LAUNCH_FLOW_COMPLETED:
        // The review flow has finished. Continue with your app flow (for
        // example, move to the next screen).
        break;
    default:
        // Unknown status.
        break;
}

当状态为 REVIEW_REQUEST_FLOW_COMPLETED 且您的应用已准备就绪时,启动应用内评价流程:

// This call uses android_native_app_glue.h.
ReviewErrorCode error_code = ReviewManager_launchReviewFlow(app->activity->clazz);
if (error_code != REVIEW_NO_ERROR) {
    // There was an error while launching the flow.
    return;
}

启动应用内评价流程后,持续检查完成状态,并继续执行您的应用流程。处理这种情况的一种常见方法是遵循游戏循环模式。

释放资源

您的应用使用完该 API 后(例如,应用内评价流程完成后),一定要记得调用 ReviewManager_destroy 函数来释放资源。

void ReviewManager_destroy();

后续步骤

测试应用的应用内评价流程,以验证您的集成是否正常运行。