Ray Wenderlichチュートリアルブックに従って、シンプルな非消耗型のアプリ内購入メカニズムを実装しました。
アプリが起動したら、製品情報リクエストを開始します。
self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
_productsRequest.delegate = self;
[_productsRequest start];
SKProductRequestが作成されます。メモリアドレスがありますが、他には何も起こりません。どのデリゲートメソッドも呼び出されません。
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
NSLog(@"Product info received...");
NSArray *products = response.products;
for (SKProduct *product in products) {
NSLog(@"ID: %@, title:%@, (%f)", product.productIdentifier, product.localizedTitle, product.price.floatValue);
}
self.productsRequest = nil;
}
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
NSLog(@"Failed to load list of products");
self.productsRequest = nil;
}
私は2回チェックしました:
Ray Wenderlichの本には、私はこれ以外に何もしなければならないことは書かれていません。
onceのみ-didFailWithError:デバイスのデリゲートの呼び出しを見ましたが、再び表示されることはありませんでした。代理人がデバイスでもシミュレータでも呼び出されません。まったく応答せずに数分間実行しました。
iTunes Connectはこの紛らわしい警告を出します:
最初のアプリ内購入は、新しいアプリバージョンで送信する必要があります。 [バージョンの詳細]ページの[アプリ内購入]セクションからそれらを選択し、[バイナリをアップロードする準備ができました]をクリックします。
アプリ内購入をテストする前に、これは必要ですか?
Xcode 5.0(5A1413)の現在のバージョンでは、アプリ内購入はiOSシミュレーターでは機能しません。
StoreKit(アプリ内購入)はシミュレーターでは機能しません。 13962338
ソース:Xcode 5.0リリースノート>既知の問題> iOSシミュレータ https://developer.Apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/xc5_release_notes/xc5_release_notes.html#//Apple_ref/doc/ uid/TP40001051-CH2-SW3
IOSシミュレーターのドキュメントでは、次のように記述されています。
APIの制限
IOSシミュレーター内では、APIと機能に次のようないくつかの制限があります。
Apple Push Services Privacy alerts for access to Photos, Contacts, Calendar, and Reminders The UIBackgroundModes key iCloud document syncing and key-value storage support
サポートされていないフレームワークは次のとおりです。
External Accessory Media Player Message UI Event Kit In UIKit, the UIVideoEditorController class Store Kit
アプリ内購入ではStore Kitが機能する必要があり、Store KitフレームワークはSimulatorではサポートされていないため、iOSシミュレーターでIAPをテストすることはできません。
残念ながら、シミュレータでテストできないことがいくつかあります。アプリ内購入はそのリストに属しています。
そのため、シミュレーターでアプリ内購入をテストすることはできません。そのためにはiOSデバイスが必要です。
編集:私が見る限り、シミュレータでIAPをテストしようとすると、購入代行者が呼び出されません。
私は何かを考え出した:
AppDelegateの-didFinishLaunching ...の最後にSKProductRequest immediatelyを開始しましたが、うまくいきませんでした。
それから私は遅れて電話をして、3秒待った。それからそれは働き始めました。そのため、アプリの起動直後にStoreKitリクエストを行うことはできません。
SkProductRequestオブジェクトはどこで宣言されていますか? skProductRequestのグローバル宣言を試してください。