You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native CLI集成Google Play Integrity:求规范文档及可行方案

在React Native CLI中集成Google Play Integrity校验的方案

核心实现思路

Google Play Integrity目前没有官方React Native封装库,需通过原生模块桥接或社区第三方库实现,以下是可落地的步骤:

1. 前置准备

  • 确保React Native项目已关联Google Play开发者账号,且App已上传至Play Console(至少内部测试版本)
  • 在Play Console中启用Play Integrity API:进入「App integrity」>「Play Integrity API」,按指引启用并获取对应API密钥

2. Android原生端集成

Play Integrity是Android专属能力,需在原生代码中实现校验逻辑,再桥接给React Native:

步骤1:添加依赖到android/app/build.gradle

dependencies {
    // 引入Play Integrity官方库
    implementation "com.google.android.play:integrity:1.2.0"
}

步骤2:创建原生模块桥接类

在android/app/src/main/java/com/[你的包名]/路径下创建PlayIntegrityModule.java:

package com.yourappname;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Promise;
import com.google.android.play.core.integrity.IntegrityManager;
import com.google.android.play.core.integrity.IntegrityManagerFactory;
import com.google.android.play.core.integrity.IntegrityTokenRequest;
import com.google.android.play.core.integrity.IntegrityTokenResponse;

public class PlayIntegrityModule extends ReactContextBaseJavaModule {
    private final IntegrityManager integrityManager;

    public PlayIntegrityModule(ReactApplicationContext reactContext) {
        super(reactContext);
        integrityManager = IntegrityManagerFactory.create(reactContext);
    }

    @Override
    public String getName() {
        return "PlayIntegrity";
    }

    @ReactMethod
    public void requestIntegrityToken(String nonce, Promise promise) {
        IntegrityTokenRequest request = IntegrityTokenRequest.builder()
                .setNonce(nonce)
                .setCloudProjectNumber(1234567890) // 替换为你的Google Cloud项目编号
                .build();

        integrityManager.requestIntegrityToken(request)
                .addOnSuccessListener(response -> promise.resolve(response.token()))
                .addOnFailureListener(e -> promise.reject("PLAY_INTEGRITY_ERROR", e.getMessage()));
    }
}

步骤3:注册模块包

创建PlayIntegrityPackage.java:

package com.yourappname;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class PlayIntegrityPackage implements ReactPackage {
    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new PlayIntegrityModule(reactContext));
        return modules;
    }

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }
}

步骤4:在MainApplication.java中注册包

@Override
protected List<ReactPackage> getPackages() {
    List<ReactPackage> packages = new PackageList(this).getPackages();
    packages.add(new PlayIntegrityPackage()); // 添加此注册代码
    return packages;
}

3. React Native端调用

在JS代码中调用原生模块获取校验Token:

import { NativeModules } from 'react-native';
const { PlayIntegrity } = NativeModules;

// 生成随机nonce(保证请求唯一性)
const generateNonce = () => {
  return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
};

// 请求Play Integrity Token
const fetchIntegrityToken = async () => {
  try {
    const nonce = generateNonce();
    const token = await PlayIntegrity.requestIntegrityToken(nonce);
    // 将token发送至后端完成校验
    console.log('Integrity Token:', token);
  } catch (error) {
    console.error('Play Integrity请求失败:', error);
  }
};

4. 后端Token校验

获取到的Token需发送至你的后端,通过Google Play Integrity API完成校验:

  • 后端使用Google Cloud服务账号密钥调用API,解析Token中的完整性信息
  • 校验维度包括:App是否为官方未篡改版本、是否运行在合规设备、是否存在作弊行为等

关于react-native-firebase/appcheck的说明

react-native-firebase/appcheck是Firebase生态的安全工具,用于保护Firebase资源,和Google Play Integrity是两类不同服务:

  • Play Integrity提供更全面的应用+设备完整性校验,覆盖Play生态全场景
  • App Check仅针对Firebase服务做访问权限控制,无法替代Play Integrity的核心功能

内容的提问来源于stack exchange,提问作者Tech vivek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:10:39