Apple App Store服务器库Java版深度解析与应用指南

Apple App Store服务器库Java版深度解析与应用指南

【免费下载链接】app-store-server-library-java 【免费下载链接】app-store-server-library-java 项目地址: https://gitcode.com/gh_mirrors/ap/app-store-server-library-java

项目架构全景概览

Apple App Store服务器库Java版是一个专门为Java开发者设计的工具库,旨在简化与App Store Server API的集成过程。该项目采用现代化的构建工具和清晰的包结构,为开发者提供了一套完整的解决方案。

核心代码结构

项目的核心代码位于src/main/java目录下,按照功能模块进行了精心组织:

客户端通信模块

  • AppStoreServerAPIClient:核心API客户端,负责与App Store服务器进行通信
  • BearerTokenAuthenticator:Bearer令牌认证器,实现安全认证机制
  • BaseAppStoreServerAPIClient:基础API客户端,提供共享功能

数据模型层

  • 交易相关模型:TransactionInfoResponse、HistoryResponse等
  • 通知处理模型:NotificationHistoryResponse、SendTestNotificationResponse等
  • 验证数据模型:DecodedSignedData及其实现类

高级功能模块

  • 促销优惠签名创建器:PromotionalOfferSignatureCreator等
  • 高级商业功能:AdvancedCommerceInAppSignatureCreator
  • 数据验证器:SignedDataVerifier、ChainVerifier

构建与依赖管理

项目采用Gradle作为主要构建工具,同时支持Maven依赖管理。构建配置文件包括:

  • settings.gradle:项目设置配置
  • gradle.properties:Gradle属性定义
  • gradlewgradlew.bat:跨平台构建脚本

环境配置与初始化

系统要求

  • Java 11或更高版本
  • 有效的Apple开发者账户
  • 从App Store Connect获取的In-App Purchase密钥

密钥配置流程

要使用App Store Server API或创建促销优惠签名,需要从App Store Connect获取签名密钥。此过程需要管理员权限,具体路径为:用户和访问 > 集成 > In-App Purchase。在此处可以创建和管理密钥,同时找到发行者ID。

根证书获取

从Apple PKI网站的Apple根证书部分下载并存储根证书。将这些证书作为数组提供给SignedDataVerifier,以验证签名数据是否来自Apple。

核心功能使用详解

API客户端初始化

import com.apple.itunes.storekit.client.AppStoreServerAPIClient;
import com.apple.itunes.storekit.model.Environment;

import java.nio.file.Files;
import java.nio.file.Path;

public class ClientInitialization {
    public static void main(String[] args) throws Exception {
        String issuerId = "99b16628-15e4-4668-972b-eeff55eeff55";
        String keyId = "ABCDEFGHIJ";
        String bundleId = "com.example";
        Path filePath = Path.of("/path/to/key/SubscriptionKey_ABCDEFGHIJ.p8");
        String encodedKey = Files.readString(filePath);
        Environment environment = Environment.SANDBOX;

        AppStoreServerAPIClient client = new AppStoreServerAPIClient(
            encodedKey, keyId, issuerId, bundleId, environment
        );
    }
}

数据验证机制

import com.apple.itunes.storekit.verification.SignedDataVerifier;
import com.apple.itunes.storekit.model.Environment;
import com.apple.itunes.storekit.model.ResponseBodyV2DecodedPayload;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Set;

public class DataVerificationExample {
    public static void main(String[] args) {
        String bundleId = "com.example";
        Environment environment = Environment.SANDBOX;
        Set<InputStream> rootCAs = Set.of(
            new FileInputStream("/path/to/rootCA1"),
            new FileInputStream("/path/to/rootCA2")
        );
        Long appAppleId = null;

        SignedDataVerifier signedPayloadVerifier = new SignedDataVerifier(
            rootCAs, bundleId, appAppleId, environment, true
        );
        
        String notificationPayload = "ey...";
        
        try {
            ResponseBodyV2DecodedPayload payload = 
                signedPayloadVerifier.verifyAndDecodeNotification(notificationPayload);
            System.out.println(payload);
        } catch (VerificationException e) {
            e.printStackTrace();
        }
    }
}

迁移工具使用

import com.apple.itunes.storekit.migration.ReceiptUtility;
import com.apple.itunes.storekit.client.AppStoreServerAPIClient;
import com.apple.itunes.storekit.model.TransactionHistoryRequest;
import com.apple.itunes.storekit.model.HistoryResponse;

import java.util.LinkedList;
import java.util.List;

public class MigrationExample {
    public static void main(String[] args) throws Exception {
        String appReceipt = "MI...";
        ReceiptUtility receiptUtil = new ReceiptUtility();
        String transactionId = receiptUtil.extractTransactionIdFromAppReceipt(appReceipt);
        
        if (transactionId != null) {
            TransactionHistoryRequest request = new TransactionHistoryRequest()
                .sort(TransactionHistoryRequest.Order.ASCENDING)
                .revoked(false)
                .productTypes(List.of(TransactionHistoryRequest.ProductType.AUTO_RENEWABLE));
            
            HistoryResponse response = null;
            List<String> transactions = new LinkedList<>();
            
            do {
                String revision = response != null ? response.getRevision() : null;
                response = client.getTransactionHistory(
                    transactionId, revision, request, GetTransactionHistoryVersion.V2
                );
                transactions.addAll(response.getSignedTransactions());
            } while (response.getHasMore());
            
            System.out.println(transactions);
        }
    }
}

高级特性应用

促销优惠签名创建

import com.apple.itunes.storekit.offers.PromotionalOfferSignatureCreator;

import java.nio.file.Files;
import java.nio.file.Path;
import java.util.UUID;

public class SignatureCreationExample {
    public static void main(String[] args) throws Exception {
        String keyId = "ABCDEFGHIJ";
        String bundleId = "com.example";
        Path filePath = Path.of("/path/to/key/SubscriptionKey_ABCDEFGHIJ.p8");
        String encodedKey = Files.readString(filePath);

        PromotionalOfferSignatureCreator signatureCreator = 
            new PromotionalOfferSignatureCreator(encodedKey, keyId, bundleId);
        
        String productId = "<product_id>";
        String subscriptionOfferId = "<subscription_offer_id>";
        String appAccountToken = "<app_account_token>";
        UUID nonce = UUID.randomUUID();
        long timestamp = System.currentTimeMillis();
        
        String encodedSignature = signatureCreator.createSignature(
            productId, subscriptionOfferId, appAccountToken, nonce, timestamp
        );
        System.out.println(encodedSignature);
    }
}

版本管理与升级策略

该库采用语义化版本控制,只有最新的主要版本会接收更新,包括安全更新。因此,建议及时升级到新的主要版本。

主要版本特性

版本3.x系列

  • 支持自定义Bearer令牌提供者和HTTP客户端实现
  • 重构AppStoreServerAPIClient类的内部实现
  • 重命名applicationUsername为appAccountToken

版本2.x系列

  • 支持App Store Server API v1.12和App Store Server Notifications v2.12
  • 在PromotionalOfferSignatureCreator中正确处理null appAccountToken

最佳实践建议

安全配置

  • 妥善保管API密钥信息,避免硬编码
  • 使用环境变量管理敏感配置
  • 定期更新根证书文件

性能优化

  • 利用证书链验证缓存机制
  • 合理设置HTTP客户端参数
  • 监控API调用频率和响应时间

错误处理

  • 实现完整的异常处理机制
  • 记录详细的错误日志
  • 设置适当的重试策略

通过本指南的深度解析,开发者可以全面掌握Apple App Store服务器库Java版的核心功能和使用技巧,为应用内购买功能的实现提供强有力的技术支撑。

【免费下载链接】app-store-server-library-java 【免费下载链接】app-store-server-library-java 项目地址: https://gitcode.com/gh_mirrors/ap/app-store-server-library-java

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值