Post not yet marked as solved
Hello! I want to clarify the usage scope of auto-renewable subscriptions. The guideline telling us:"If you offer an auto-renewing subscription, you must provide ongoing value to the customer. While the following list is not exhaustive, examples of appropriate subscriptions include: new game levels; episodic content; multi-player support; apps that offer consistent, substantive updates; access to large collections of, or continually updated, media content; software as a service (“SAAS”); and cloud support."So, it's emphasises, that there could be other cases. I want to be sure will my app be approved by the review, or not.My application is an offline business utility. It doesn't provide any cloud services or updating media content. The only reason to use subscriptions is that the app will be consistently updated according to: iOS updates, user suggestions, new features and bug fixes. So it's probably one of "apps that offer consistent, substantive updates", isn't it?What should I write to users and to Apple so that the app will be able to pass review?There are many reasons why I like auto-renewable subscription model, besides 85% revenue. It sufficiently lowers barriers for a user, thanks to the free trial and ability to cancel if the first experience was not satisfying. Moreover, it provides great feedback: looking at subscribed users count I'm able to decide, should I spend more time supporting this application, or should I pay attention to another, more successful aps. I also can release the app earlier, and gradually improve it constantly listening to user feedback. It's better than make a technically ideal paid app that nobody will buy. And I think it just more fair, because todays app are not "fire and forget" products and require continuous maintenance and updates.
Post not yet marked as solved
When a user upgrades or downgrades their auto-renewable subscriptions via the "Manage Subscriptions" URL, how is the application notified of this? It doesn't appear that any kind of transaction is processed on the transaction queue, so how is the application supposed to know that something has changed? When does the receipt get updated with this information?If a user upgrades from subscription A to subscription B, how does the app know this has occurred? If there was an SKPaymentTransaction in the app, we're not seeing it. Since there is no sandbox support for this scenario, I have no idea how to handle it.
Post not yet marked as solved
Hi,In my app I am linking the user via a rate button to my app in app store but when the user presses send after writing a review in app store via this method I am getting reports that the user is being asked for a nickname after pressing send in app store and then the review not being sent - what could be causing this issue - I can confirm it is happening for me also.Thanks in advance
Post not yet marked as solved
I am getting error "The address entered appears to be invalid. Please correct your address and resubmit". While I am trying to sign auto-renewable in-app purchase.I tried all possible combinations of wordings. even though my address is correct
Post not yet marked as solved
Hi,I'm working with subscriptions.How do I know when a subscription expires, or is cancelled by the user? Does Apple push this information to my app automatically, or do I have to execute a command such as SKReceiptRefreshRequest or restoreCompletedTransactions?What is the difference between requesting a receipt refresh and restoring completed transactions?Thanks,Frank
Application Loader 3.7 no longer supports in-app purchase delivery.http://help.apple.com/itc/apploader/#/apdS73193199I have an app in the store that has IAP's with Apple-hosted content. Does anyone know the process now for updating the hosted content?
Post not yet marked as solved
Hi everyone,I created a WebView app for my web application (that is fully responsive and unique), but I forgot theres a paid feature using Stripe and Apple will probably not allow that since they want inapp purchase to be enabled on the iOS app (which they take 30% of! vs Stripes 2.9%).. I was wondering if I could get around this problem by showing a message that says "in order to pay you must visit the website", so no transaction is done via the iOS app, but I still get to use Stripe and not have to worry about recoding my web app to support inapp purchases..Would this work or would Apple refuse this?Any feedback would be great.
Post not yet marked as solved
How can I verify that server-to-server notification comes from Apple, and not from third-party malefactor?Maybe we could get some IP-ranges, from which Apple send notifications?Or maybe we should make request to AppStore to get info by receipt from notification, and compare it with json?Or maybe it possible to exchange keys? or use existed keys to verify source of request?Is there any best practices?Thank you.Anna
Post not yet marked as solved
Hi,We have few unhapy customers in iTunes, we need to refund their in-app purchase. Do we have an opton on iTunes to refund individual purchase.Awaiting for your reply.Regards,AP
Post not yet marked as solved
HI, I am amaking an application and in that there's a feature of live streaming for which i would like to charge the end users. Now as per my understanding, apple does not allow 3rd party payment integrations if there is no physical exchange of goods or services. I need to use In -App purchases in this case . But the isue i have is i need to split the paymnets at time of receiving it and In-App purchases do not do that. Let me know if i am wrong on this, because if that's posiible then my problem will be resolved. Now i wanted to know if i integrate the 3rd party payment gateway for this split payments , then are there chances that Apple might reject my application and force me to do it using In-App purchases ? Any help would really be appreciated.
Post not yet marked as solved
Hello.I tested it in a sandbox environment yesterday.Suddenly this morning In App Purchase system does not work.I don't know Why this problem happen.It was the same with the old code.I tested until yesterday, submitted a binary app to the App Store, and the app is approved.I tested before distributing my app, but In-app Purchase did not work. NSSet* productIdentifier = [NSSet setWithObject:productIdentifiers.productCode];
SKProductsRequest *productsRequest = [[SKProductsRequest alloc]initWithProductIdentifiers:productIdentifier];
productsRequest.delegate = self;
[productsRequest start];and..- (void) productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)responsenever called... No error any response... No....
Post not yet marked as solved
Hello, I've been trying to figure this out for days now. My app allows users to purchase a renewing subscription which unlocks premium in-app features. However, one device can also have multiple user accounts. If a user purchases a subscription on one account then logs into another account on the same device, that account must purchase a subscription too to access the premium features. Basically, the accounts are not tied to the device, or an iTunes account. From what I've read, StoreKit does not seem to allow this.So, I have thought of integrating a 3rd party payment system like Stripe. This would work but the Apple guidelines do not allow anything other than IAP if your premium features are in-app.Is there any way I can do this?
Post not yet marked as solved
Hello,Wondering if anyone has run into this problem or can shed some light on the subject:Can a free app that is mainly used for consuming video content have a subscription option, BUT - can the subscription be set up and paid thru a webview (or WKWebView) INSIDE the app?Or does this HAVE to use Apple's IAP structure?Basically, i am trying to see if i can bypass the 30% cut taken from Apple if i use the IAP. When looking at other apps, the WWE app popped out at me (iOS version, not the tvOS). I am able to create a WWE Network account AND pay for it - w PayPal or my credit card. And i know WWE is NOT giving Apple 30% bc it uses a Webview and it does not use a user's appleID nor the IAP. Any help, links or advice would be greatly appreciated.Thanks everyone.
Post not yet marked as solved
When you uncheck 'Cleared for Sale' for an auto-renewing IAP…I suppose it disappears from the iTunes Manage Subscriptions UI?Will it stop renewing for current subscribers?Will current subscribers be informed?Will current subscribers be able to restore the purchase?
Post not yet marked as solved
Guys I'm desesperately asking help, I did a mistake when I wanting to "confirm the purchase for enroll developer program" now I have two sameApple Developer Program - Membership for one yearApple Developer Program - Membership for one yearFor the same account! How Apple didn't validate that? I don't understand why but its duplicated and worst I cannot cancel it!I'm not a rich guy, 99 USD is money for me and its money will be miss my account and I cannot cancel it!Can some body me help me how to proceed this cancel procedure? I'm desesperated trying but the website is fair from easy to use very very complicated and I'm a developer using internet since 1996 and so...Can somebody please explain what happens if I pay two App developer program for the same account? Why it can't be canceled'??orders numbers duplicatedW461687288W482678723For God Sake Apple, please do something about it, don't allow people buy the same thing for the same account it doesn't make sense! That's your fault not mine because it just doesn't make sense at all!
Post not yet marked as solved
What happens when an application purchase is refunded?I'm a little confused as to the process of determining if the user is still entitled to content in our app. The application once refunded appears to remain on the users' device fully functional?I understand that with in-app purchases we can use the cancellation field in the application receipt to determine if purchases have been refunded however this doesn't seem to apply when the application purchase is refunded.Any help is appreciated.
Post not yet marked as solved
I wanted to know how would I set up Apple Pay in my app, and also in-app purchases. I already have the prices I want. So how would I do this? I have my app set up so you select a type of ride and ride length then it takes you to a PriceView where it shows what you selected and how much it cost. I want it so that when you are in the PriceView and you tap the book button it asks you to pay.
Post not yet marked as solved
Today, I confirmed the sandbox environment for the receipt of my subscription.original_transaction_id has been changed each time the subscription is renewed.The original_transaction_id is set to the same value as the transaction_id of the renewal of the subscription.Until last week, original_transaction_id always had the first transaction_id set.Was the specification changed?Or is it a sandbox environment bug?The guidelines have the following description.This value is the same for every specific subscription. This value is useful for relating together multiple iOS 6 style transaction receipts for the same individual customer's subscription.
Post not yet marked as solved
I've created a unity app with in app purchases following this guide https://unity3d.com/learn/tutorials/topics/ads-analytics/integrating-unity-iap-your-gameIt works perfectly on android but doesn't work at all on IOS and i have used the same bundle id and product ids on both stores.The error that i get on IOS is : "InizializationFailureReasom: NoProductsAvailable."Here are the things that i've done:- Created an App ID on the apple developer portal with the correct capabilities (In-App Purchase)- I have enabled the correct capabilities on the xcode project (In-App Purchase)- I am using testflight to submit the app with a distribution certificate that appears to be valid- I've checked the the bundle identifier and it's the same everywhere (unity project, xcode project, App ID)- The productd ids are also correct both in the code and on the itunes connect portal- All of the products are cleared for sale and are in the status "ready to submit"- The administrator of my team has filled all of the tax and banking information required for in app purchase on itunesconnect- I always uninstall the old app version before testing the new one- We are also using sandbox users to test purchases but I have read that it shouldn't be needed anymore because we are using test flightI suspect that it has to do with certificates/provisioning profile that I am using or the permissions of the developer account used to upload the build.The account that I am using on apple.developer.com has the "admin" privileges.With this account i have created a "iOS Certificate" for "production" and I have included it to the keychain.I've also created a "iOS Provisioning Profile" for "distribution" and included it into the keychain.I think I am using the correct provision/certificate on xcode but when I am finished building it always says the certificate is "Unknown" and the profile is "None" (i have xcode 10.1)Is there anything that i am doing wrong? Is the status "ready to submit" good for the products? Or do i need to submit the products for review even if i am only testing?
Post not yet marked as solved
I am trying to restore Non-Consumable IAP with SKPaymentQueue.default().restoreCompletedTransactions() and nothing work according to plan. In sandbox I get "There's no information available for In-App Purchases. Try again later. 21105" and in Prod just nothing happens. From what I can see that error in Sandbox is thrown with actual SKPaymentQueue.default().restoreCompletedTransactions() line and nothing is processed after that. I am sure everything is right, since I can make my purchase by hand and it works, I can also repurchase anything again with error, that I already have it and then item get activated, but Restore button is not working (restorePurchases()). I do have 38 IAP in this app, but I am not sure if that is related in any way, and they all are Non-Consumable. It is iMessage Extension that sells stickers. What is also strange, is that Apple did kick my app back because I used my Own Art without My own permission (that was halarious), but everything states, that with Non-Consumable must have Restore and Apple check for that, and in this case everything passed while it is not working.My whiole IAP handlicg class look like this:import Foundation
import StoreKit
import os.log
class IAPService: NSObject
{
private override init() {} // make sure there is no extra copies
static let shared = IAPService() // makes this singleton
fileprivate var products = [SKProduct]()
let paymentQueue = SKPaymentQueue.default()
let defaults = UserDefaults.standard
var haveData = false
var reference = StickewrsCollectionViewController()
fileprivate var request = SKProductsRequest()
let log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "IAPService")
let receiptFetcher = ReceiptFetcher()
func getProducts()
{
let allStickersIAP = “IAP reference”
var iapList = Dictionary<string, string="">()
if let path = Bundle.main.path(forResource: "StickersData", ofType: ".plist")
{
let dict = NSDictionary(contentsOfFile: path) as! Dictionary<string, anyobject="">
let globalData = dict["StickerData"] as! Array
iapList = (globalData[1]) as! Dictionary<string, string="">
}
var products: Set = [allStickersIAP]
for iap in iapList
{
products.insert(iap.value)
}
request = SKProductsRequest(productIdentifiers: products)
request.delegate = self
request.start()
paymentQueue.add(self)
SKPaymentQueue.default().add(self)
os_log("Getting products")
}
func purchase(product: String)
{
if (SKPaymentQueue.canMakePayments())
{
guard let productToPurchase = products.filter({$0.productIdentifier == product}).first
else {return}
let payment = SKPayment(product: productToPurchase)
paymentQueue.add(payment)
}
}
func restorePurchases()
{
print("Restoring purchases")
os_log("Restoring purchases")
SKPaymentQueue.default().restoreCompletedTransactions()
}
func iapCheck() -> Bool
{
return SKPaymentQueue.canMakePayments() && haveData
}
func getProductData(iap: String) -> SKProduct
{
return products.filter({$0.productIdentifier == iap}).first ?? SKProduct()
}
func priceStringForProduct(item: SKProduct) -> String? {
let price = item.price
if price == NSDecimalNumber(decimal: 0.00) {
return NSLocalizedString("free", comment: "")
} else {
let numberFormatter = NumberFormatter()
let locale = item.priceLocale
numberFormatter.numberStyle = .currency
numberFormatter.locale = locale
return numberFormatter.string(from: price)
}
}
func setReference(ref: StickewrsCollectionViewController)
{
reference = ref
}
public func passPopUp(_ text: String)
{
reference.ShowPopUp(text)
}
// Called when the application is about to terminate.
func applicationWillTerminate(_ application: UIApplication) {
// Remove the observer.
SKPaymentQueue.default().remove(self)
}
}
extension IAPService: SKProductsRequestDelegate, SKPaymentTransactionObserver
{
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
products = response.products
haveData = true
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState
{
case .purchasing: break
case .purchased:
do {
defaults.set(true, forKey: transaction.payment.productIdentifier)
defaults.synchronize() // save changes in PlayerPrefs
print(transaction.payment.productIdentifier)
queue.finishTransaction(transaction)
}
case .restored:
do {
print("Do actual restoring")
os_log("Now restoring %@", transaction.original!.payment.productIdentifier)
reference.ShowPopUp("Restoring purchase \(transaction.original!.payment.productIdentifier)")
defaults.set(true, forKey: transaction.original!.payment.productIdentifier)
defaults.synchronize() // save changes in PlayerPrefs
print(transaction.payment.productIdentifier)
queue.finishTransaction(transaction)
}
default: queue.finishTransaction(transaction)
}
}
reference.redrawnAfterPurchase()
}
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
for transaction in queue.transactions {
let t: SKPaymentTransaction = transaction
let prodID = t.payment.productIdentifier as String
defaults.set(true, forKey: prodID)
defaults.synchronize() // save changews in PlayerPrefs
print(prodID)
queue.finishTransaction(transaction)
}
reference.redrawnAfterPurchase()
reference.ShowPopUp(NSLocalizedString("restoreCompleted", comment: ""))
}
}
extension SKPaymentTransactionState
{
func status() -> String
{
switch self {
case .deferred: return "deferred"
case .failed: return "failed"
case .purchased: return "purchased"
case .purchasing: return "purchasing"
case .restored: return "restored"
}
}
}Whart I did wrong and how I can make RestorePurchases actually do something ?