在C#/ASP.NET MVC后端读取Google Pub/Sub安卓订阅完整详情
获取Google Play订阅完整详情的实现步骤
我耗时3天完成安卓应用的Google Pub/Sub推送通知配置,目前后端已能接收安卓端的所有订阅通知,但不知如何读取付款人、过期日期等完整订阅详情,也不清楚必要步骤。
后端收到的Pub/Sub通知格式:
{ "message" : { "attributes":{ "key": null }, "data": "JSON_CODE", "messageId": "6542662753109422", "message_id": "6546652753109422", "publishTime": "2023-01-01T15:53:42.962Z", "publish_time": "2023-01-01T15:53:42.962Z" }, "subscription": "projects/{api_id}/subscriptions/{service_name}-sub" }
message.data解码后的内容:
{ "version": "1.0", "packageName": "com.expamle.android", "eventTimeMillis": "1672588422635", "subscriptionNotification": { "version": "1.0", "notificationType": 4, "purchaseToken": "lkgkfeofbmfnnalianjdppej.AO-J1OxNcztkkzntpvQk4nttaBiqHJ5WMD58tb_KxCdsyPooE_QPvqXdtnoEpqD0t96j5V4lxol3_FfpuRNDvBeRTYKo_ixJtw", "subscriptionId": "12_month_plan" } }
我持有keys.json文件,且已配置Pub/Sub服务账号的全部必要权限,以下是获取完整订阅详情的方法:
- 核心逻辑:Pub/Sub推送的通知仅包含基础订阅标识,需通过Google Play Developer API查询完整订阅数据
- 步骤1:启用Google Play Developer API
在Google Cloud Console中找到并启用该API,确保服务账号拥有调用权限 - 步骤2:服务账号认证
使用keys.json生成OAuth2认证令牌,或直接借助官方SDK(支持Java、Python等)处理认证 - 步骤3:调用订阅查询接口
调用purchases.subscriptions.get接口,传入以下参数:packageName:解码后data中的对应字段值subscriptionId:解码后data中的对应字段值token:解码后data中的purchaseToken字段值
- 步骤4:解析响应数据
接口返回的响应包含完整订阅信息,比如:expiryTimeMillis:订阅过期时间戳autoRenewing:自动续费状态priceAmountMicros:订阅价格purchaseTimeMillis:购买时间戳- 付款人相关标识等
示例代码(Python):
from google.oauth2 import service_account from googleapiclient.discovery import build # 加载服务账号密钥 SERVICE_ACCOUNT_FILE = 'keys.json' SCOPES = ['https://www.googleapis.com/auth/androidpublisher'] credentials = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=SCOPES) # 初始化API客户端 android_publisher = build('androidpublisher', 'v3', credentials=credentials) # 接口参数 package_name = 'com.expamle.android' subscription_id = '12_month_plan' purchase_token = 'lkgkfeofbmfnnalianjdppej.AO-J1OxNcztkkzntpvQk4nttaBiqHJ5WMD58tb_KxCdsyPooE_QPvqXdtnoEpqD0t96j5V4lxol3_FfpuRNDvBeRTYKo_ixJtw' # 调用接口 response = android_publisher.purchases().subscriptions().get( packageName=package_name, subscriptionId=subscription_id, token=purchase_token ).execute() # 打印完整订阅详情 print(response)
- 注意事项:必须将服务账号添加到Google Play Console的开发者团队,并授予
查看应用或财务数据权限,否则会触发权限不足错误
内容的提问来源于stack exchange,提问作者MohammedIsmael
相关产品推荐
相关产品推荐

