アプリの購入-Response.Productsはまだ空ですか?
-
22-09-2019 - |
質問
基本的に、テストアプリでアプリの購入を設定してから、会社が取り組んでいる適切なアプリに実装しました。ストアキットPDFやその他のスニペットを約1000回読みましたが、製品はまだ空のように返されています。これが私がこれまでに行ったことです:
セットアップテストアプリおよびアプリ購入テスト項目
iPhone Dev Centerの会社の開発者ポータルに「テストアプリ1」の新しいアプリIDを作成しました。プレフィックスがあることを確認しました com.mycompany.testappone
アプリで購入することができることを確認します。アプリIDセクションに留まり、「アプリ購入の有効化」オプションをチェックすることにより、アプリの購入で構成しました。
iTunes Connectで「テストアプリ1」を作成し、通常の手順を完了しましたが、「後でバイナリアップロード」を選択しましたが、アプリが何もしないためレビューのために送信しませんでした。確かに、これが機能するためにレビューするためにアプリを提出する必要はありませんか?!次に、アプリの購入の管理をクリックして、製品ID 'test1'を使用した新しいものを作成し、販売のためにクリアされるように承認しました。
コード
Xcodeと呼ばれる新しいプロジェクトを設定しました TestAppOne
そして、これが私が今使用している唯一の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
誰でも、私がステージを離れたかどうか、または私が間違っていることがあるかどうか教えてください。残念ながら、Appleが作成したアプリの例はないようです。
解決
実際、私はあなたがこれを機能させるためにバイナリを提出する必要があると思います。
リリース日を遠い未来に設定できます。
他のヒント
見落とされがちなもう1つの重要なステップは、iTunes Connectの「契約、税金、銀行」セクションの下にあるiOS有料申請契約のセットアップを確認する必要があることです。まず、リクエストボタンをクリックする必要があります。次に、3つのセットアップボタン(連絡先情報、銀行情報、税情報)をクリックする必要があります。
無効な製品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/
これは、この問題の非常に包括的なチェックリストです。
Xcodeのバンドル識別子(com.company.appnameなど)がiTunes Connectのものと一致するかどうかを確認します。
動作するためにバイナリを送信する必要はありません。
デバイスのアプリケーションを削除し、Xcodeから再度起動するだけです。それは私にとって問題を修正しました。
バイナリをアップロードしたり、iTunes Connectでアプリ内購入を作成してから数時間待つ必要はありません。
Alpereの回答のおかげで、私は間違った製品IDを使用していることがわかりました。そうだった いいえ やっぱり de.company.appname.PROFESSIONAL_LICENSE
. 。使用するだけです PROFESSIONAL_LICENSE
私の場合(主要なバンドルIDのものなし)動作します:)
InAppPurchaseのサンドボックステスト用にバイナリをアップロードする必要はありません。 ItunesConnectにInppurchaseアイテムを追加して、「送信する準備ができている」(必須)のみを記載するだけです。レビューのために送信すると、常にOU Response.productが空になります。
無料のサブスクリプション製品を追加してみてください。応答に表示されている場合、コードには何も悪いことはありません。無料のサブスクリプションは契約、税金、銀行を必要としない唯一のタイプであり、それが現れ、他のタイプがそうでない場合、それはあなたの契約に関連する問題です。
私の場合、その理由は、Appleが誤ってオンにしたコンテンツのホストでした。製品は私がそれをオフにしたときにのみ利用可能でした
私の場合(MACOS)、テストアプリケーションを作成していました(メインアプリケーションと同じバンドルIDを使用)。 SkfetchRequestは、バンドル名(バイナリ名)を元のアプリケーションと同じように設定した後にのみ、テストアプリケーション用の製品IDの返却を開始しました。