PopUp asking to sign in to iTunes Store on App start

I am having exactly the same problem as described here :

I am testing an app on a iOS11 and getting a PopUp asking to sign in to iTunes Store [Sandbox] every time I start the application - even I am not logged into iTunes/App Store anymore under Settings. After entering the password the popup disappears, but comes again once the app is being started again. A never-ending loop…

According to the Apple documentation the message is stored on device in a StoreKit queue - because its processing was not successfully finished by calling “finishedMessage()”.

According to Apple technical note the message can be removed by calling “finishMessage” in paymentQueue(_:updatedTransactions:):

 - (void)paymentQueue:(SKPaymentQueue_)queue updatedTransactions:(NSArray_)transactions{
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
 }

I see no callback “updatedTransactions” in sdkbox::IAPListener which would allow me to finished this message. I’ve added a log into all sdkbox::IAPListener interface methods:

virtual void onInitialized(bool success);
virtual void onSuccess(const sdkbox::Product& p);
virtual void onFailure(const sdkbox::Product& p, const std::string& msg);
virtual void onCanceled(const sdkbox::Product& p);
virtual void onRestored(const sdkbox::Product& p);
virtual void onProductRequestSuccess(const std::vector<sdkbox::Product>& products);
virtual void onProductRequestFailure(const std::string& msg);
virtual void onRestoreComplete(bool ok, const std::string &msg);
virtual bool onShouldAddStorePayment(const std::string& productName);
virtual void onFetchStorePromotionOrder(const std::vector<std::string>& productNames, const std::string& error);
virtual void onFetchStorePromotionVisibility(const std::string productName, bool visibility, const std::string& error);
virtual void onUpdateStorePromotionOrder(const std::string& error);
virtual void onUpdateStorePromotionVisibility(const std::string& error);

No one will get called after I enter a correct password - keeping the message in the queue and prompting for password every time I start the application again.

Is there a SDKBOX solution for this case? I do not want to restore device OR write an own observer in Objective C.

whats your plugin version and how to reproduce this issue?

did u do some IAP before, non_consumable or consumable ?

please try sdkbox::IAP::finishTransaction api

can you give a steps, how to reproduce this?

Perhaps this post is also related: Can not login with sdkboxplay on Android

Version: SDKBOX 2.3.17.3
Product type: non_consumable

How to reproduce:

  1. it was triggered by “restore()” call, which took too long, so the app was closed and then reopen
  2. a productive user (not a special itunes connect sandbox user) was configured under Settings and used for restore
  3. after reopening the popup with password appeared (and is still appearing)

It is a local “device” issue - the same user on other device is working propertly. Calling of “finishMessage” would make sence, but first I need to get the message, which is in the queue on the device - and then with its parameters I could call it.

Currently it looks like SDKBOX does not „see“ such messages.

Thanks for your steps. Try it today.

Can you send us a screen capture using quicktime? We want to see how to reproduce this issue.

  1. I do not want to reproduce the problem again on my phone - I have already one non processed message in the local queue and do not wish to have two of them - without having a solution

  2. it makes no sense to make a video of a starting application, which immediately brings a popup. I just made a printscreen (s. PS). This popup appears immediately after starting the application. If SDKBOX routines (I have to comment ALL of them out):

sdkbox::IAP::setListener(this);
sdkbox::IAP::init();
sdkbox::IAP::setDebug(false);

are commenting out, the popup does not appear if the application is started again.

The application is calling neither restore() or purchase(), it is enough if

sdkbox::IAP::setDebug(false);

will be called and immediately after this call a popup appears.

  1. this problem is definitly linked to sandbox environment:
    A) deleting app, which was installed from Xcode
    B) installing a productive version from Apple App Store => No Popups at all, even the same user is configured under Settings => iTunes/App Store

C) delete app downloaded from app store
D) install a new test version from Xcode => Popup appears again, entering of a correct password does not solve the issue, the popup appears always (even on app closing)

  1. it is exactly the same problem as described in detail here and the solution is to call finishTransaction() in the (void)paymentQueue:(SKPaymentQueue_)queue updatedTransactions:(NSArray_)transactions method as described in Apple technical note - search for “Finish the transaction”.

So the question is, does SDKBOX offer such callback?

If you have any debug library/project, send them to me, I can run them with a phone, on which this stack local message exists.

PS:

So I do not understand this bug at all:

  1. SDKBOX completely removed
  2. own SKPaymentTransactionObserver in iOS11 implemented
  3. the popup appears immediately after calling

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

  1. BUT no observer method will get called - even the correct password was entered:

    • (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions NS_AVAILABLE_IOS(3_0);
    • (void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray<SKPaymentTransaction *> *)transactions NS_AVAILABLE_IOS(3_0);
    • (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error NS_AVAILABLE_IOS(3_0);
    • (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue NS_AVAILABLE_IOS(3_0);
    • (void)paymentQueue:(SKPaymentQueue *)queue updatedDownloads:(NSArray<SKDownload *> *)downloads;
    • (BOOL)paymentQueue:(SKPaymentQueue *)queue shouldAddStorePayment:(SKPayment *)payment forProduct:(SKProduct *)product;

So for me it looks like an Apple bug, which I can not reproduce and a resulted message can not be finished/processed/skipped…

I will restore the phone now.

1 Like

Maybe the sign in is for something else, such as iCloud?

iCloud or some other services are triggering the popup:
No they do not. The following actions stop appearing of the popup:

  1. removing SDKBOX IAP and recompile

  2. if my own iOS IAP class is used instead of SDKBOX: removing calling of

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

and recompile
3. deletion of the App, which was installed from XCode and installation of a productive version from App Store of the same application

So it is linked to Apple Sandbox IAP, but from my opinion not to SDKBOX.