Ответ 1
Попробуйте использовать это:
SKProduct *selectedProduct = <#from the products response list#>;
SKPayment *payment = [SKPayment paymentWithProduct:selectedProduct];
[[SKPaymentQueue defaultQueue] addPayment:payment];
Привет, я использую покупку APP в своем проекте. Когда я запускаю этот проект, все работает нормально, за исключением того, что я получаю предупреждающее сообщение о том, что "paymentWithProductIdentifier устарел", я прошел аналогичные вопросы, которые заданы в переполнении стека, но я не был удовлетворен. Я показал вам свою кодировку, которую я использовал в проекте ниже
SKPayment *payment=[SKPayment paymentWithProductIdentifier:@"com.mycompany.dmaker.maker1"];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] addPayment:payment];
Может ли кто-нибудь сказать мне 1) альтернатива для этого предупреждения. 2) или сообщите, одобрен ли этот проект в appstore, если я использую этот существующий код.
Попробуйте использовать это:
SKProduct *selectedProduct = <#from the products response list#>;
SKPayment *payment = [SKPayment paymentWithProduct:selectedProduct];
[[SKPaymentQueue defaultQueue] addPayment:payment];
Вы можете заменить paymentWithProductIdentifier:
на следующие коды:
// SKPayment *payment = [SKPayment paymentWithProductIdentifier:productId];
// [[SKPaymentQueue defaultQueue] addPayment:payment];
NSSet *productIdentifiers = [NSSet setWithObject:productId];
self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
self.productsRequest.delegate = self; // your wrapper for IAP or AppDelegate or anything
[self.productsRequest start];
а productsRequest
- свойство сохранения.
И реализуем метод SKProductsRequestDelegate:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
for (SKProduct *product in response.products) {
SKPayment *payment = [SKPayment paymentWithProduct:product];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
self.productsRequest = nil;
}
Вместо этого вы можете использовать следующий код, у него есть немного больше, что у вас уже есть, но просто чтобы убедиться, что
#define kInAppPurchaseId "(your product ID here)"
- (void)makePurchase{
//call this when you would like to begin the purchase
//like when the user taps the "purchase" button
NSLog(@"User requests to make purchase");
if([SKPaymentQueue canMakePayments]){
NSLog(@"User can make payments");
SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:kInAppPurchaseId]];
productsRequest.delegate = self;
[productsRequest start];
}
else{
//the user is not allowed to make payments
NSLog(@"User cannot make payments due to parental controls");
}
}
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
SKProduct *validProduct = nil;
int count = [response.products count];
if(count > 0){
validProduct = [response.products objectAtIndex:0];
NSLog(@"Products Available!");
[self purchase:validProduct];
}
else if(!validProduct){
NSLog(@"No products available");
}
}
- (IBAction)purchase:(SKProduct *)product{
SKPayment *payment = [SKPayment paymentWithProduct:product];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
Я использую этот код в одном приложении, поэтому он должен работать.
У вас есть 3 варианта:
подавить это предупреждение с помощью определения препроцессора:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SKPayment *payment=[SKPayment paymentWithProductIdentifier:@"com.mycompany.dmaker.maker1"];
#pragma clang diagnostic pop
[[SKPaymentQueue defaultQueue] addPayment:payment];
создайте SKMutablePayment
вместо SKPayment
:
SKMutablePayment *payment = [[SKMutablePayment alloc] init];
payment.productIdentifier = @"com.mycompany.dmaker.maker1";
payment.quantity = 1;
[[SKPaymentQueue defaultQueue] addPayment:payment];
использовать paymentWithProduct:
инициализатор удобства:
SKPayment *payment = [SKPayment paymentWithProduct:<# product that you received in productsRequest:didReceiveResponse: #>];
[[SKPaymentQueue defaultQueue] addPayment:payment];