20

こんにちは、私のプロジェクトでアプリの購入に使用しています。このプロジェクトを実行すると、「paymentWithProductIdentifierは非推奨です」という警告メッセージが表示されることを除いて、すべて正常に機能します。スタックオーバーフローで尋ねられる同様の質問をしましたが、満足できませんでした。以下のプロジェクトで使用したコーディングを示しました

SKPayment *payment=[SKPayment paymentWithProductIdentifier:@"com.mycompany.dmaker.maker1"];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] addPayment:payment];

誰でも教えてもらえますか 1) この警告の代替案。2)または、この既存のコードを使用する場合、このプロジェクトがアプリストアで承認されるかどうか教えてください。

4

4 に答える 4

2

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];

whileproductsRequestは保持プロパティです。

そして、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;
}
于 2013-09-12T05:08:13.737 に答える
2

次の 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];
    
于 2015-07-21T21:50:59.117 に答える
1

代わりに次のコードを使用することもできます。これには、既に持っているかもしれない少し余分なものがありますが、念のため

#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];
}

私は自分のアプリケーションでこのコードを使用しているので、うまくいくはずです。

于 2013-10-14T23:10:10.817 に答える