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
相关产品推荐
相关产品推荐

