一窟她、證書配置(在此暫時不贅述了)
developer.apple.com/account/ios/identifier/bundle
二陈症、蘋果內(nèi)支付需要的產(chǎn)品ID
1、創(chuàng)建一個新的APP(此APP的) ?-> 看下圖
? ? ? ? ? ? ? ? ? ?選擇新建APP<根據(jù)自己所需震糖,此處已APP為例>
? 到此一個APP創(chuàng)建好了录肯,當(dāng)然如果需要上線的話,就需要詳細(xì)填寫內(nèi)容吊说,再次不多說了嘁信。此處僅作為內(nèi)支付測試所以不需要填寫,直接下一步>>>>>>>>>>>
到此潘靖,一個產(chǎn)品ID創(chuàng)建完成,下面走一趟項目配置
三蚤蔓、項目配置
1卦溢、不廢話,圖片走起
到這里就差不多了,下面就是最想看到也是最簡單的代碼部分了单寂。代碼很簡單贬芥、只是前期工作有點繁瑣
四、代碼?
1宣决、頭文件不會忘了吧
#import <StoreKit/StoreKit.h> ? ? ? ? ? ? // pay支付
2蘸劈、協(xié)議還記得吧
<SKProductsRequestDelegate,SKPaymentTransactionObserver>
3、復(fù)制代碼的地方
#pragma mark ---- 蘋果Pay支付
/** 蘋果Pay支付 */
- (void)doApplePayWithData:(NSDictionary *)orderDic {
// 設(shè)置代理
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
//判斷是否可進(jìn)行支付
if ([SKPaymentQueue canMakePayments])
{
NSLog(@"許程序內(nèi)付費購買");
//根據(jù)商品ID查找商品信息
NSArray *product = [[NSArray alloc] initWithObjects:@"申請到的產(chǎn)品ID", nil];
NSSet *nsset = [NSSet setWithArray:product];
//創(chuàng)建SKProductsRequest對象尊沸,用想要出售的商品的標(biāo)識來初始化威沫, 然后附加上對應(yīng)的委托對象。
//該請求的響應(yīng)包含了可用商品的本地化信息洼专。
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];
request.delegate = self;
[request start];
}
else
{
[SVProgressHUD showErrorWithStatus:@"不允許程序內(nèi)付費"];
}
}
#pragma mark ---- SKProductsRequestDelegate
// 以上查詢的回調(diào)函數(shù)
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
NSLog(@"----%lu---",(unsigned long)response.invalidProductIdentifiers.count);
NSLog(@"goods info back");
NSArray *myProduct = response.products;
if(myProduct.count == 0){
NSLog(@"無法獲取產(chǎn)品信息棒掠,購買失敗。");
return;
}
for(SKProduct *pro in myProduct){
NSLog(@"%@", [pro description]);
NSLog(@"%@", [pro localizedTitle]);
NSLog(@"%@", [pro localizedDescription]);
NSLog(@"%@", [pro price]);
NSLog(@"%@", [pro productIdentifier]);
NSLog(@"%@", [pro.priceLocale objectForKey:NSLocaleCurrencySymbol]);
NSLog(@"%@", [pro.priceLocale objectForKey:NSLocaleCurrencyCode]);
if([pro.productIdentifier isEqualToString:@"申請到的產(chǎn)品ID"]){
// 下面代碼看需要
_currentProduct? = pro;
_appPayGoodsPrice = [NSString stringWithFormat:@"%@", [pro price]];
_appPayGoodsCurrency = [NSString stringWithFormat:@"%@",[pro.priceLocale objectForKey:NSLocaleCurrencyCode]];
break;
}
}
NSLog(@"start pay");
//創(chuàng)建一個支付對象屁商,并放到隊列中
SKPayment *payment = [SKPayment paymentWithProduct:_currentProduct];
NSLog(@"---------發(fā)送購買請求------------");
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
NSLog(@"請求商品失敗%@",error);
}
- (void)requestDidFinish:(SKRequest *)request {
[SVProgressHUD dismiss];
NSLog(@"反饋信息結(jié)束調(diào)用");
}
#pragma mark ---- SKPaymentTransactionObserver
// 監(jiān)聽購買結(jié)果
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{
NSLog(@"pay result");
for(SKPaymentTransaction *transaction in transactions){
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
{
//交易完成
NSLog(@"transactionIdentifier = %@", transaction.transactionIdentifier);
NSLog(@"---蘋果Pay支付-交易完成---");
kSucPrompt(@"---蘋果Pay支付-交易完成---");
}
break;
case SKPaymentTransactionStateFailed:
{
//交易失敗
NSLog(@"---蘋果Pay支付-交易失敗---");
kFailPrompt(@"---蘋果Pay支付-交易失敗---");
}
break;
case SKPaymentTransactionStateRestored:
{
//已經(jīng)購買過該商品
NSLog(@"---蘋果Pay支付-已經(jīng)購買過該商品---");
kFailPrompt(@"---蘋果Pay支付-已經(jīng)購買過該商品---");
}
break;
case SKPaymentTransactionStatePurchasing:
{
//商品添加進(jìn)列表
NSLog(@"---蘋果Pay支付-商品添加進(jìn)列表---");
kSucPrompt(@"---蘋果Pay支付-商品添加進(jìn)列表---");
}
break;
default:
break;
}
}
}
//交易結(jié)束
- (void)completeTransaction:(SKPaymentTransaction *)transaction {
NSLog(@"交易結(jié)束");
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
//- (void)dealloc{
//? ? [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
//? ? [[NSNotificationCenter defaultCenter] removeObserver:self];
//}
五烟很、補充
1、支付測試前需要把測試機(jī)上面已登錄的蘋果賬號注銷掉蜡镶;
2雾袱、沙箱測試員的郵箱需是未注冊過蘋果賬號的郵箱;
ps:粗略整理官还,不完善之處望見諒~