We are adding in-app purchases to our app. I have created several products in iTunes Connect and most of these get listed in the app, except for the one that is using hosted content.
My problem is the following:
When I upload a hosted content package for the product the package has to be reviewed. Is there no way around this for testing purpose in the sandbox mode? I am not even sure that my package is good until I have tested it, so I really hope I don't have to wait for a review each time I make a small change to the package. Ideally the package should only need review when it is finished and ready for sale.
Never mind, it doesn't need review (even thought Xcode says so when you upload). I was missing the screenshot of my app with the product showed, which is weird because:
a) They say that it is only used for the review (so why do I need it for testing?)
b) I cannot actually take the screenshot with the product listed since it is not listed because it is missing the screenshot .............
My solution was to take a dummy screenshot, upload it, get the product listed in the app and take a new screenshot with the product listed.
Related
I'm just trying to load my first app up to App Connect in order to let a few friends test it. So they can download it.
Got though the first few headaches like Frameworks not being set up correctly...
Now of course the final authorisation has failed due to lack of certain images and icons non of which I'm bothered to do right now I just want to be able to remotely share the app.
Do I really have to get all that stuff fixed first?
Is it not possible to share a slightly rough version via TestFlight?
EDIT:
These are my errors. Not sure what the first error means but the others obviously for missing image data.
First, I'd recommend fixing those errors anyway. They're simple. Just add an app icon with the correct sizes. It doesn't have to be a good/final icon yet. You can use my script here: https://gist.github.com/DaveWoodCom/0b9dd0efb9d10f0f0ba9977ccc35a86a
that takes a simple 1024x1024 png file and resizes it to all the required sizes for you. It even gives you a Contents.json asset catalog file.
Second, if you're just sending the beta to your friends, you don't really need to go through TestFlight review yet. You can either create a user account in App Store Connect for each of your friends (note: I'd recommending using your own email address me+friendsname#yourdomain.com for their accounts so they can't actually log into ASC and see any of your data), or you can create an Adhoc distribution profile for your app and include your friends device UUID's. Then you build your .ipa file and send it to them to install. You could even use a new project I've just created: https://github.com/DaveWoodCom/OTAgo and let them install the app over the air, via a web site. Note that project is brand new and thus is still in beta (will change a lot in the coming weeks, but it should be decent enough for your use case).
So I'm testing out an in-app purchase in my app. I've got the code set up properly and everything, but when I do attempt to buy or restore in the sandbox environment, I get this error:
MZCommerceInAppBuy.App BuyInfoDataAccessFailure_message
[Environment: Sandbox]
I've never seen this before, and I am finding only one Google search result from someone else who has. It never was solved. Has anybody seen this?
I figured out a solution. The problem was coming because I was adding an in-app purchase to the current live version of my app. I created a new version of my app and changed it on my target to the update version.
I also downloaded a new development provisioning profile. I'm not sure if this is necessary, but I wanted to add that I created a new one just in case.
When you add in-app purchases to an app, you must create a new app version even for testing.
Note:
Just a side note. I noticed while I received this error I also wan't receiving any in-app purchase products. You will not receive any products until you create the new version.
If I offer an in-app Non-consumable purchase (say a book, or a song) within my app and then 2-3 months after it has been released I realize that there is something wrong with my digital content, Can I do an update of the digital content? So if I had a digital article as an in-app purchases for $1.99 and sold 1,000 copies, then I realized that I have a spelling error on page 3. Would I be able to upload an updated article that would go out to all the people who bought the article and prevent people from downloading the old copy? If not, how is this situation handled in the real world? I have looked in apples doc, but cannot find an answer.
Edit: Assume I am using the new io6 feature of hosting the content through apple.
Yes, as a matter of fact, provided that you do a few steps, you can keep track and systematically, efficiently keep track of what is downloaded.
1.Yes it's possible. Provided you keep a track of who has bought what pack (ie. keep a bool value as an NSUserDefault), then they will still have access to it (even if you add more stuff/levels to it).
2.It depends what you mean by notified; they will know if they read the update comments when they install the update. Also you could just choose to alert them when the load the app after the update - your call.
3.If you're submitting the code Apple will review it. Just think of it like any other update to an app.
This is taken directly from here: Update in-app purchase content for iOS app?
After you have updated your content for the app store, you can allow your users to Restore Purchases and obtain the updated content!
Overall, have a mechanism to keep track of the version of the in-App purchases' version and then update when needed!
There is always, apple's own documentation:
Here you go! :)
I hope this is clear and helpful!
EDIT:
After checking the user's content version number and finding that it's outdated, you would call the method (by the way, you would probably implement this checking mechanism in your app delegate.
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
This would restore the transactions, but make sure you also need to include the rest of the implementation code!
I assume you know the code to restore in app purchases, but if not, here are a couple good links!
Restore already bought in-app-purchases on iPhone?
http://www.iosdeveloperguide.com/in-app-purchase-heads-up-to-avoid-app-rejection/
http://appotography.com/2011/07/06/restoring-purchases-on-iphone-and-ipad/
About AppStore Hosted Content
I have not tried, but browsing inside Apple doc, I've found this which confirms that you can upload multiple versions of a digital content hosted by Apple.
"You can have multiple versions of hosted content, but each one needs to be approved by Apple before it can be purchased by users."
Also, you can check this and this tutorials, that shows that you have to specify the Content Version and IAP ProductIdentifier in the ContentInfo.plist when you create an App Store Hosted Content with Xcode.
How to notify the users that content has changed
This depends of how you implement your purchase system, the content delivery, and how you keep track of the "state of your purchased products". Usually we keep track of the version of the purchased products, thats means, we save the product_id with the content version when the purchased content is downloaded. We can save this data in files or inside a DB locally. Also, you don't have to worry about non downloaded (and non purchased) products, those do not need an update. When you update your in-app store with the last information of your available products (via update button, or app launch, or whatever you implemented) you should compare the last content versions with those you have downloaded, then you can notify the user that an update of his purchased product is available. Finally, you have to enable the download for that product.
This all depends on how you make the content available to the user. When the user makes their original purchase of the in-app content, where does the content come from?
If it is part of the app bundle, then the only way to get updated content to these users is to submit an update to your app that includes the updated content. When the user installs the updated app, they will see the updated content.
If, upon purchase, the app downloads the content from your server then you can build in a mechanism in your app that checks your server for updated versions of the content. If it detects there is an update, and the user has the IAP, then the app can download the updated content.
Edit: This doesn't cover the new iOS 6 feature of Apple hosted downloadable content.
For the above problem:
please have a look at the following urls for separate things:
Following link is the link to the SKDownload API:
http://developer.apple.com/library/ios/#documentation/StoreKit/Reference/SKDownload_Ref/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011851
Following link is the link to a great post which explains the working of SKDownload API:
How to download In-App hosted content?
Now in your position we can follow the following steps:
Push another package on the Apple Account which is to be hosted (with corrections).
Push an update the app on the App store with the following changes: (This handles any new download from the new users.)
a. Update your code of the InAppPurchase with the new identifier of the file
Now we have to handle the old users, we can consider the following two approaches:
a. We can show the user a restore button, by tapping which the user would be downloading the article again.
b. In iOS for things to go automatically to all existing users we do have a mechanism of push notifications, on the receiving of this the user would be triggering the event to again download the data from the Apple Hosting.
I'm getting ready to submit an App that relies on the user being at specific locations to watch a video. (Kind of a mashup of geocaching and youtube.) Needless to say none of these videos are anyway near Apples headquarters. So how will the App store review people be able to properly review the App? Do I have to provide test data in their vicinity or can I instruct them to fake their geolocation to a location that works?
I guess the best way is to just submit it once, wait ~7 days and see what they have to say,
but since they have special toolchains to test apps, it shouldn't be a problem.
Just make sure to mention it in the review notes.
I've submitted an update to an app once that requires an user and password to login, and gave them a test user. When I checked the server logs, they never logged in once - but the app was still approved.
The iOS Simulator can 'fake' its location :) Though I doubt what they DO review in their process, because once they accepted one of my Apps' update which crashed upon launch...
Recently had to deal with this myself... submitted a location specific app without any extra review notes, and the app got rejected. In the rejection notice I was given the instruction to create a video of the app in action and then provide a link in the review notes.
So I used another iPhone to take the video, put some basic explanation text in the video using iMovie, uploaded to YouTube, put the link in the reviewers notes, re-submitted the app and then 5 or so days later it was approved.
As I understand, they review team does NOT test the usability nor stability of your app during app reviewing. All you need to do, is to provide an testing account, and some sample data, screenshots to them helping understand how your app works. If the app does not show any data because of a reasonable circumstance, it's not the problem of your app quality nor user usage, but data coverage. So you won't have problem with it.
My in app purchase project working perfectly now, but I need to test purchasing and when once purchase is successfully done it cannot be undone? How can I test in app purchasing and upgrading my app to full version when it can be done just one time?
Delete the app from your device
Run "Clean" from the Product menu in XCode
On your device, go to "Settings", "Store", "Apple ID", and Sign Out
Start your app again, since you're not signed in to any account, the previous in-app purchase will not be recognized and you'll be able to buy it/download it again with the same test user account
None of the answers is really correct. Even if the you remove the cached purchase from your testing device, the product is marked as bought in Apple's server, associated to your test Apple ID. So the testing will not exactly reproduce the expected behavior. This is very important for testing the restore products function use cases, for example.
As far as I know, the real answer to this question is: You can't without creating a new test account, but that's not a really big deal, you can even use an invented email address (no need to validate it), and you can delete the account after using it.
If you delete your app and reinstall it, you can repurchase products. It follows the same code flow and nearly exactly the same user experience (there is a dialog letting you know that you can repurchase for free the second time). Also you can create more test users in iTunes Connect to be sure that you are doing completely clean testing.
I've spent several weeks deleting and reinstalling my app many times per day to ensure that my storekit implementation works just like I want it too.
All you have to do is delete your app from the device. This will wipe out any NSUserDefaults where you may have stored in-app purchase details.
Once you run your app again, make the purchase one more time, and Store Kit will tell you this:
"You've already purchased this. Tap OK to download it again for free"
Once you tap OK, you go through the same sequence of events you did when you made your first in-app purchase, so you can test again and again.
Use unit tests on your app, with false data, until you're satisfied.
(create test code - for each module you use)
I think I'll need more description of your process to have a better answer.