近期對自己的App進行上架,其中走了很多彎路,最后終于成功了!總結了下方便以后復習同時讓大家看下有沒有紕漏的地方。
一、真機調試介紹
二、怎樣做真機調試
三、申請AppleID在這里就不做說明了,直接進這里https://appleid.apple.com/cn/注冊就可以了
四、申請好AppleID后需要加入蘋果開發者計劃
五、配置真機調試
開發者主頁:https://developer.apple.com
requestWangtedProducts
{
// 1.獲取想要賣的商品的ProductId
NSString *productPath = [[NSBundle mainBundle] pathForResource:@"iapdemo.plist" ofType:nil];
NSArray *products = [NSArray arrayWithContentsOfFile:productPath];
NSArray *productIds = [products valueForKeyPath:@"productId"];
// 2.將ProductIds發送到蘋果服務器,請求這些商品是否可賣
NSSet *productIdSet = [NSSet setWithArray:productIds];
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdSet];
request.delegate = self;
[request start];
}
在代理方法中拿到可銷售的商品
pragma mark - 實現SKProductsRequest的代理方法
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
// 1.獲取可銷售的商品,并且排序
self.products = [response.products sortedArrayWithOptions:NSSortConcurrent usingComparator:^NSComparisonResult(SKProduct *obj1, SKProduct *obj2) {
return [obj1.price compare:obj2.price];
}];
// 2.以tableView的形式展示商品
[self.tableView reloadData];
}
用戶點擊購買,創建票據
- (void)buyProduct:(SKProduct *)product
{
// 1.創建票據
SKPayment *payment = [SKPayment paymentWithProduct:product];
// 2.將票據加到到交易隊列中
[[SKPaymentQueue defaultQueue] addPayment:payment];
// 3.觀察交易隊列中交易發生的改變
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
}
交易隊列中交易發生改變時,執行的監聽方法
pragma mark - 實現交易發生改變的回調方法
-
(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions) {
switch (transaction.transactionState) {
case SKPaymentTransactionStatePurchasing:
NSLog(@"正在購買商品");
break;case SKPaymentTransactionStatePurchased: NSLog(@"購買成功"); [queue finishTransaction:transaction]; break; case SKPaymentTransactionStateFailed: NSLog(@"購買商品失敗"); [queue finishTransaction:transaction]; break; case SKPaymentTransactionStateRestored: NSLog(@"恢復購買"); [queue finishTransaction:transaction]; break; case SKPaymentTransactionStateDeferred: NSLog(@"最終狀態未決定"); break; default: break;
}
}
以上供大家參考!謝謝!