版本記錄
| 版本號 | 時(shí)間 |
|---|---|
| V1.0 | 2018.07.25 |
前言
大家都知道,ios虛擬商品如寶石、金幣等都需要走內(nèi)購,和蘋果三七分成,如果這類商品不走內(nèi)購那么上不去架或者上架以后被發(fā)現(xiàn)而被下架。最近有一個(gè)項(xiàng)目需要增加內(nèi)購支付功能,所以最近又重新集成并整理了下,希望對大家有所幫助。感興趣的可以參考上面幾篇。
1. iOS內(nèi)購IAP(一) —— 基礎(chǔ)配置篇(一)
2. iOS內(nèi)購IAP(二) —— 工程實(shí)踐(一)
3. iOS內(nèi)購IAP(三) —— 編程指南之關(guān)于內(nèi)購(一)
4. iOS內(nèi)購IAP(四) —— 編程指南之設(shè)計(jì)您的應(yīng)用程序的產(chǎn)品(一)
5. iOS內(nèi)購IAP(五) —— 編程指南之檢索產(chǎn)品信息(一)
Requesting Payment - 請求支付
在購買過程的第二部分中,在用戶選擇購買特定產(chǎn)品后,您的應(yīng)用程序會(huì)向App Store提交付款請求,如圖3-1所示。

Creating a Payment Request - 創(chuàng)建一個(gè)支付請求
當(dāng)用戶選擇要購買的產(chǎn)品時(shí),使用產(chǎn)品對象創(chuàng)建付款請求,并在需要時(shí)設(shè)置數(shù)量,如Listing 3-1所示。 產(chǎn)品對象來自應(yīng)用程序產(chǎn)品請求返回的產(chǎn)品數(shù)組,如 Retrieving Product Information中所述
// Listing 3-1 Creating a payment request
SKProduct *product = <# Product returned by a products request #>;
SKMutablePayment *payment = [SKMutablePayment paymentWithProduct:product];
payment.quantity = 2;
Detecting Irregular Activity - 檢測無規(guī)律活動(dòng)
App Store使用不規(guī)則活動(dòng)檢測引擎來幫助打擊欺詐行為。某些應(yīng)用程序可以提供其他信息,以提高引擎檢測異常事務(wù)的能力。如果您的用戶擁有您的帳戶,除了他們的App Store帳戶外,請?jiān)诟犊顣r(shí)提供此額外信息。
作為說明,考慮以下兩個(gè)例子。在正常情況下,您服務(wù)器上的許多不同用戶都購買了在您的游戲中使用的硬幣,并且每個(gè)用戶都從不同的App Store帳戶支付購買費(fèi)用。相比之下,服務(wù)器上的單個(gè)用戶多次購買硬幣是非常不尋常的,從不同的App Store帳戶支付每次購買的費(fèi)用。 App Store無法自行檢測此類不規(guī)則活動(dòng) - 它需要您的應(yīng)用程序提供有關(guān)您的服務(wù)器上的哪個(gè)帳戶與該交易相關(guān)聯(lián)的信息。
要提供此信息,請使用服務(wù)器上用戶帳戶名的單向哈希填充付款對象的applicationUsername屬性,例如LIsting 3-2中所示的示例。
// Listing 3-2 Providing an application username
#import <CommonCrypto/CommonCrypto.h>
// Custom method to calculate the SHA-256 hash using Common Crypto
- (NSString *)hashedValueForAccountName:(NSString*)userAccountName
{
const int HASH_SIZE = 32;
unsigned char hashedChars[HASH_SIZE];
const char *accountName = [userAccountName UTF8String];
size_t accountNameLen = strlen(accountName);
// Confirm that the length of the user name is small enough
// to be recast when calling the hash function.
if (accountNameLen > UINT32_MAX) {
NSLog(@"Account name too long to hash: %@", userAccountName);
return nil;
}
CC_SHA256(accountName, (CC_LONG)accountNameLen, hashedChars);
// Convert the array of bytes into a string showing its hex representation.
NSMutableString *userAccountHash = [[NSMutableString alloc] init];
for (int i = 0; i < HASH_SIZE; i++) {
// Add a dash every four bytes, for readability.
if (i != 0 && i%4 == 0) {
[userAccountHash appendString:@"-"];
}
[userAccountHash appendFormat:@"%02x", hashedChars[i]];
}
return userAccountHash;
}
如果使用其他方法填充此屬性,請確保您提供的值是與服務(wù)器上用戶帳戶唯一關(guān)聯(lián)的不透明標(biāo)識符。 不要將Apple ID用于您的開發(fā)者帳戶,用戶的Apple ID或服務(wù)器上用戶未hash的帳戶名稱。
Submitting a Payment Request - 提交付款申請
將支付請求添加到事務(wù)隊(duì)列會(huì)將其提交到App Store。 如果您多次向隊(duì)列添加付款對象,則會(huì)多次提交 - 用戶需要多次付費(fèi),并且您的應(yīng)用預(yù)計(jì)會(huì)多次發(fā)放該產(chǎn)品。
[[SKPaymentQueue defaultQueue] addPayment:payment];
對于您的應(yīng)用提交的每個(gè)付款請求,它會(huì)返回必須處理的相應(yīng)交易。 在 Waiting for the App Store to Process Transactions中會(huì)對交易和交易隊(duì)列進(jìn)行說明。
后記
本篇主要講述了請求支付,感興趣的給個(gè)贊或者關(guān)注~~~~
