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

使用google-apis-playintegrity_v1解码Integrity Token时遇400错误求助

Play Integrity接口调用400错误排查建议

问题描述

使用Ruby的google-api-ruby-client库中的google-apis-playintegrity_v1模块处理Android Play Integrity验证结果时,调用decode_integrity_token接口返回400错误,错误提示为Integrity token cannot be decoded due to invalid arguments.。

实现代码

# Gemfile
gem "google-apis-playintegrity_v1"
...


# API可执行文件
require 'google/apis/playintegrity_v1'

class AndroidRightfulnessCheck
  class << self
    def device_rightfulness_check( integrity_token: token)
      play_integrity = Google::Apis::PlayintegrityV1
      decode_integrity_token_request = play_integrity::DecodeIntegrityTokenRequest.new
      play_integrity_service = play_integrity::PlayIntegrityService.new
      cred = Google::Auth::DefaultCredentials.make_creds(json_key_io: StringIO.new(ENV["PRIVATE_KEY"]), scope: "https://www.googleapis.com/auth/playintegrity")
      play_integrity_service.authorization = cred

      integrity_token = decode_integrity_token_request.update!(integrity_token: integrity_token)
      payload = play_integrity_service.decode_integrity_token(package_name, integrity_token)
    end
  end
end

错误信息

Error - #<Google::Apis::ClientError: Invalid request status_code: 400 header: #<HTTP::Message::Headers:0x000055d11d04b098 @http_version="1.1"
, @body_size=0
, @chunked=false
, @request_method="POST"
, @request_uri=#<Addressable::URI:0x2ae88e7fa714 URI:https://playintegrity.googleapis.com/v1/package_name:decodeIntegrityToken?>
, @request_query=nil
, @request_absolute_uri=nil
, @status_code=400
, @reason_phrase="Bad Request"
, @body_type=nil
, @body_charset=nil
, @body_date=nil
, @body_encoding=#<Encoding:UTF-8>
, @is_request=false
...
body: "{
  \"error\": {
    \"code\": 400
,\"message\": \"Integrity token cannot be decoded due to invalid arguments.\"
,\"status\": \"INVALID_ARGUMENT\"
  }
}\n"

排查建议

  • 修正参数传递逻辑:
    代码中错误地将DecodeIntegrityTokenRequest对象赋值给了integrity_token变量并传入接口,导致参数类型不匹配。正确写法应为:

    # 方式1:直接赋值token
    decode_integrity_token_request.integrity_token = integrity_token
    payload = play_integrity_service.decode_integrity_token(package_name, decode_integrity_token_request)
    
    # 方式2:使用update!后传递对象
    decode_integrity_token_request.update!(integrity_token: integrity_token)
    payload = play_integrity_service.decode_integrity_token(package_name, decode_integrity_token_request)
    
  • 验证包名正确性:
    确认package_name变量已正确赋值为Android应用的真实包名,需与生成Integrity Token的应用包名完全一致,包括大小写和拼写。从错误的请求URI可见,当前package_name是未替换的字面量,需检查变量赋值逻辑。

  • 检查Integrity Token有效性:
    确保传入的integrity_token是从Android客户端正常获取的未篡改值,且未过期(Play Integrity Token有效期通常为几分钟)。

  • 确认服务账号权限:
    检查用于认证的服务账号已在Google Play Console关联目标应用,且拥有Play Integrity API的访问权限;同时验证ENV["PRIVATE_KEY"]中的JSON密钥格式正确、内容完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:30:47