web-dev-qa-db-ja.com

iPhoneアプリ内購入-response.productsはまだ空ですか?

基本的に、私の会社が取り組んでいる適切なアプリに実装する前に、テストアプリでアプリ購入を設定しようとしました。ストアキットのPDFやその他のスニペットを約1000回読みましたが、製品はまだ空のまま返されます。これが私がこれまでにやったことです:

セットアップテストアプリとアプリ内購入のテスト項目
iPhone Dev Centreにある自社の開発者ポータルで「Test App One」の新しいアプリIDを作成しました。アプリ内購入を構成できるように、プレフィックスがcom.mycompany.testapponeであることを確認しました。 [アプリID]セクションを開いたまま、[アプリ内購入で有効にする]オプションをオンにしてアプリ購入を構成しました。

ITunes Connectで「Test App One」を作成して通常の手順を完了しましたが、「後でバイナリをアップロード」を選択しましたが、アプリが何もしないため、レビューのために送信しませんでした。これを機能させるために、レビューのためにアプリを提出する必要はありませんか?次に、アプリ購入の管理をクリックして、製品ID「test1」で新しいものを作成し、販売用にクリアされるように承認しました。

コード
私はTestAppOneというXCodeで新しいプロジェクトを設定しました。現在使用している2つのクラスは次のとおりです。

TestAppOneAppDelegate.h:

#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>  

@interface TestAppOneAppDelegate : NSObject <UIApplicationDelegate, SKRequestDelegate, SKProductsRequestDelegate> {
    UIWindow *window;
}

TestAppOneDelegate.m:

#import "TestAppOneAppDelegate.h"

static NSString *kMyFeatureIdentifier1 = @"com.mycompany.testappone.test1";

@implementation TestAppOneAppDelegate
@synthesize window;

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
 if([SKPaymentQueue canMakePayments]) {
  NSLog(@"IN-APP:can make payments");
 }
 else {
  NSLog(@"IN-APP:can't make payments");
 }

 [self requestProductData];
 [window makeKeyAndVisible]; 
}

- (void)requestProductData {
 NSLog(@"IN-APP:requestProductData");
 SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:kMyFeatureIdentifier1]];
 request.delegate = self; 
 [request start];
 NSLog(@"IN-APP:requestProductData END");  
} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
 NSLog(@"IN-APP:productsRequest");
 NSArray *myProduct = response.products;
 NSLog(@"IN-APP:array count: %i", [myProduct count]);
 [request autorelease];
 NSLog(@"IN-APP:productsRequest END"); 
}

- (void)dealloc {
    [window release];
    [super dealloc];
}

@end

デバイスでのテスト
サンドボックステストアカウントを作成し、iPhoneのiTunesアカウントからログアウトしましたが、購入段階で指示されるまで、ドキュメントでこれを実行しないように指示されているため、テストアカウントでログインしませんでした。次に、アプリをビルドします。取得したログは次のとおりです。

IN-APP:can make payments
IN-APP:requestProductData
IN-APP:requestProductData END
IN-APP:productsRequest
IN-APP:array count: 0
IN-APP:productsRequest END

私がステージを外したかどうか、または私が間違っていることがあるかどうか誰かに教えてもらえますか?残念ながら、アップル製のアプリの例はないようです。

42
user218485

実際には、これを機能させるにはバイナリを送信する必要があると思います。

リリース日を遠い未来に設定できます。

23

見落とされがちなもう1つの重要なステップは、iTunes Connectの「契約、税金、銀行」セクションの下にあるiOS有料アプリケーションの契約設定を確認する必要があることです。最初にリクエストボタンをクリックし、次に3つの設定ボタン(連絡先情報、銀行情報、税務情報)をクリックする必要があります。

32
AlBeebe

無効な製品IDがないか確認してください。

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {

for (NSString *invalidProductId in response.invalidProductIdentifiers)
    {
        NSLog(@"Invalid product id: %@" , invalidProductId);
    }
}

無効な製品IDがある場合は、アクセス http://troybrant.net/blog/2010/01/invalid-product-ids/

これは、この問題の非常に包括的なチェックリストです。

19
alpere

XCodeのバンドルID(com.company.appnameなど)がiTunes ConnectのバンドルIDと一致するかどうかを確認します。

動作させるためにバイナリを送信する必要はありません。

9
dcRay

デバイス上のアプリケーションを削除し、XCodeから再起動するだけです。それで問題が解決しました。

バイナリをアップロードしたり、iTunes Connectでアプリ内購入を作成してから数時間待つ必要はありません。

5
haddock

Alpereの回答のおかげで、間違った製品IDを使用していることがわかりました。思った通りnotだったde.company.appname.PROFESSIONAL_LICENSEPROFESSIONAL_LICENSE私の場合(先頭のバンドルIDなしで)動作します:)

3
HeyMan

InAppPurchaseのサンドボックステスト用にバイナリをアップロードする必要はありません。 iTunesConnectにInAppPurchaseアイテムを追加し、「提出準備完了」(必須)状態にするだけです。レビュー用に送信すると、常にresponse.productが空になります。

1
stack

無料サブスクリプション製品を追加してみてください。応答に表示される場合は、コードに問題はありません。無料サブスクリプションは、契約、税金、バンキングを必要としない唯一のタイプであるため、それが表示され、他のタイプが必要としない場合は、契約に関連する問題です。

私の場合、理由はAppleが誤ってオンにしたことによるコンテンツのホスティングでした。製品はオフにしたときにのみ利用可能でした

0
Andrey

私の場合(MacOS)私はテストアプリケーションを作成していました(メインアプリケーションの同じバンドルIDで)。バンドル名(バイナリ名)を元のアプリケーションと同じに設定した後にのみ、SKFetchRequestがテストアプリケーションの製品IDを返し始めました。

0
tt.Kilew