How to test IAP (in-app purchase) in iOS Simulator OR on the Device?

匿名 (未验证) 提交于 2019-12-03 02:00:02

问题:

I've implemented a simple non-consumable in-app purchase mechanism by following the Ray Wenderlich tutorial book.

When my app starts, I initiate a product info request:

self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers]; _productsRequest.delegate = self; [_productsRequest start]; 

The SKProductRequest gets created. It has a memory address but nothing else happens. None of the delegate methods gets called:

- (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; } 

I checked twice:

  • App fully set-up in iTunes Connect.
  • Status of app in ITC is "Prepare for Upload"
  • One non-consumable IAP added.
  • Status of IAP product in ITC is "Ready to Submit"
  • App ID is com.mycompany.myapp both for the app and in the plist. Checked twice.
  • IAP uses com.mycompany.myapp.productname (using exact same ID for the request).
  • Created a test user account in ITC.
  • Nothing submitted to Apple yet.
  • My Mac has internet access.
  • There are no other messages in the console or on screen.

The Ray Wenderlich book doesn't mention I must do anything else besides this.

Only once I saw a -didFailWithError: call to my delegate on the Device, but it never again appeared. My delegate doesn't get called both on device or simulator. I let it run for minutes with no response at all.

iTunes Connect gives this confusing warning:

Your first In-App Purchase(s) must be submitted with a new app version. Select them from the In-App Purchases section of the Version Details page and then click Ready to Upload Binary.

Is this required prior to being able to test In-App Purchases?

回答1:

In the current version of Xcode 5.0 (5A1413), In-App purchases will not work in the iOS simulator.

StoreKit (In-App purchases) will not work in the Simulator. 13962338

Source: Xcode 5.0 Release Notes > Known issues > iOS Simulator https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/xc5_release_notes/xc5_release_notes.html#//apple_ref/doc/uid/TP40001051-CH2-SW303



回答2:

In iOS simulator documentation it is written :

API Limitations

Within iOS Simulator, there are some limitations to the APIs and features, including:

Apple Push Services Privacy alerts for access to Photos, Contacts, Calendar, and Reminders The UIBackgroundModes key iCloud document syncing and key-value storage support 

Unsupported frameworks include:

External Accessory Media Player Message UI  Event Kit In UIKit, the UIVideoEditorController class Store Kit 

As in-app purchase needs Store Kit to work and the Store Kit framework is unsupported for Simulator, you can't test IAP in iOS Simulator.

More information : iOS Simulator documentation



回答3:

Unfortunately there are several things you can not test on the simulator. In App Purchases belongs in that list.

So you can not test In App Purchases in simulator, you need an iOS device for that.

Edit: As far as I can see, that is what happens when you try to test IAP on the simulator, purchase delegates won't get called.



回答4:

I figured out something:

I initiated the SKProductRequest immediately at the end of AppDelegate's -didFinishLaunching... and it never worked.

Then I made a delayed call and waited 3 seconds. From then on it started working. So you can't make StoreKit requests immediately after app launch.



回答5:

where your skProductRequest object is declared? you can try it with global declaration of that object.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!