مكتبة خادم Java لـ App Store Server API وإشعارات خادم App Store. متوفر أيضًا في Swift وPython وNode.js.
implementation ' com.apple.itunes.storekit:app-store-server-library:3.2.0 '
< dependency >
< groupId >com.apple.itunes.storekit groupId >
< artifactId >app-store-server-library artifactId >
< version >3.2.0 version >
dependency >
JavaDocs
فيديو WWDC
لاستخدام App Store Server API أو إنشاء توقيعات العروض الترويجية، يلزم تنزيل مفتاح التوقيع من App Store Connect. للحصول على هذا المفتاح، يجب أن يكون لديك دور المسؤول. انتقل إلى المستخدمون والوصول > عمليات التكامل > الشراء داخل التطبيق. هنا يمكنك إنشاء المفاتيح وإدارتها، بالإضافة إلى العثور على معرف جهة الإصدار الخاصة بك. عند استخدام مفتاح، ستحتاج إلى معرف المفتاح ومعرف جهة الإصدار أيضًا.
قم بتنزيل وتخزين شهادات الجذر الموجودة في قسم شهادات Apple Root في موقع Apple PKI. قم بتوفير هذه الشهادات كمصفوفة إلى SignedDataVerifier للسماح بالتحقق من أن البيانات الموقعة تأتي من Apple.
import com . apple . itunes . storekit . client . APIException ;
import com . apple . itunes . storekit . client . AppStoreServerAPIClient ;
import com . apple . itunes . storekit . model . Environment ;
import com . apple . itunes . storekit . model . SendTestNotificationResponse ;
import java . io . IOException ;
import java . nio . file . Files ;
import java . nio . file . Path ;
public class APIExample {
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 );
try {
SendTestNotificationResponse response = client . requestTestNotification ();
System . out . println ( response );
} catch ( APIException | IOException e ) {
e . printStackTrace ();
}
}
}
import com . apple . itunes . storekit . model . Environment ;
import com . apple . itunes . storekit . model . ResponseBodyV2DecodedPayload ;
import com . apple . itunes . storekit . verification . SignedDataVerifier ;
import com . apple . itunes . storekit . verification . VerificationException ;
import java . io . FileInputStream ;
import java . io . InputStream ;
import java . util . Set ;
public class ExampleVerification {
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 ; // appAppleId must be provided for the Production environment
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 . client . AppStoreServerAPIClient ;
import com . apple . itunes . storekit . client . GetTransactionHistoryVersion ;
import com . apple . itunes . storekit . migration . ReceiptUtility ;
import com . apple . itunes . storekit . model . Environment ;
import com . apple . itunes . storekit . model . HistoryResponse ;
import com . apple . itunes . storekit . model . TransactionHistoryRequest ;
import java . nio . file . Files ;
import java . nio . file . Path ;
import java . util . LinkedList ;
import java . util . List ;
public class ExampleMigration {
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 );
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 ExampleSignatureCreation {
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 = "" ;
String subscriptionOfferId = "" ;
String appAccountToken = "" ;
UUID nonce = UUID . randomUUID ();
long timestamp = System . currentTimeMillis ();
String encodedSignature = signatureCreator . createSignature ( productId , subscriptionOfferId , appAccountToken , nonce , timestamp );
System . out . println ( encodedSignature );
}
}
فقط الإصدار الرئيسي الأحدث من المكتبة هو الذي سيتلقى التحديثات، بما في ذلك التحديثات الأمنية. لذلك، يوصى بالتحديث إلى الإصدارات الرئيسية الجديدة.