Hallo!
Ich bin am Ende meines Lateins und beschreibe Euch mal ein Problem, dass mich langsam in den Wahnsinn treibt. Ich habe inzwischen alles Mögliche unternommen, um es zu lösen, leider ohne Erfolg.
Folgendes Szenario: Ich habe eine App mit einem non-consumable In-App-Purchase. Dieser IAP funktionierte bis vor ca. 1 Monat gut. Danach kamen immer wieder Meldungen von Usern, dass der IAP nicht richtig funktioniert und der zusätzliche Funktionsumfang nicht freigeschaltet wird.
Grundsätzlich betrachte ich hier den Fall des "erneuten Kaufes" (also erneuten kostenlosen Aktivierens der Funktion), so wie es aussieht tritt dieser Fehler aber auch beim Neukauf auf. Die beschriebenen Effekte scheinen unabhängig vom Device zu sein.
Ich habe das dahin gehend eingrenzen können, dass (in der Sandbox) reproduzierbar der Status SKPaymentTransactionFailed mit dem Fehlercode Cancelled (Code=2 "Verbindung mit iTunes Store nicht möglich") auftritt. Dem User wird eine Mitteilung gezeigt (und zwar gleichzeitig oder kurz bevor die updateTransactions:-Methode angesprungen wird), dass der Kauf noch nicht heruntergeladen wurde ("OK") - Achtung: Es erscheint NICHT der Hinweis "wurde schon gekauft und kann kostenlos noch einmal herunter geladen werden - OK/Cancel".
Laut TN2259 tritt dieses Verhalten auf, sofern nach dem Handling der Transaktion nicht finishTransaction: aufgerufen wurde.
Ich habe das inzwischen 1000 Mal geprüft - finishTransaction: WIRD aufgerufen und im Übrigen passiert das mit jedem Testuser, mit dem ich es bisher ausprobiert habe.
Um der Sache auf den Grund zu kommen, habe ich meinen IAP-Prozess in eine eigene Klasse überführt und dabei neu geschrieben. Es hat sich allerdings weder im Handling, noch an dem beobachteten Phänomen etwas getan.
Und nun geht's mit den Merkwürdigkeiten erst richtig los:
1. Ich habe ein neues, leeres Projekt angelegt, das den gleichen Namen und die gleiche BundleID hat, wie das fehlerhafte Projekt. Es ist nur halt im Längen kleiner, denn aus einem ViewController mit "Buy"-Button und einem Label für das Ergebnis enthält die App nichts, als meine IAP-Klasse. Die andere App wird vom Device entfernt. Ich tue dort nun (wie gesagt: mit der IAP Klasse, die auch in der "großen" App enthalten ist) genau das gleiche, wie in der anderen, verwende die gleichen IAP-BundleID, den gleichen Testuser. Ergebnis: Der Kauf funktioniert ohne Weiteres!!
2. Ich ändere in meinem "großen" Projekt nur die BundleID auf ein anderes IAP-Item, das ich testweise (und auch non-consumable) angelegt habe. Auch hier funktioniert der Kauf einwandfrei!!
3. Ändere ich die IAP-BundleID zurück auf den vorigen Wert: Fehlschlag.
4. Und jetzt der Knaller zum Schluss: Wenn ich aber nach dem Fehler in updateTransactions: nach dem Auftreten des Fehlers [[SKPaymentQueue defaultQueue] restoreCompletedTransactions] aufrufe (gleicher Testuser), wird der Kauf ohne Weiteres wieder hergestellt!
Was soll man davon halten? Ich habe meinen Code über und über gecheckt. Ich habe alles, außer der IAP-Funktionen völlig auskommentiert, ich habe gesehen, ob ich irgendwo Speicherfehler baue - nichts, kein Erfolg.
Wie gesagt, langsam gehen mir die Ideen aus. Ihr könnt bitte auch gern Raten ...
Ich bin am Ende meines Lateins und beschreibe Euch mal ein Problem, dass mich langsam in den Wahnsinn treibt. Ich habe inzwischen alles Mögliche unternommen, um es zu lösen, leider ohne Erfolg.
Folgendes Szenario: Ich habe eine App mit einem non-consumable In-App-Purchase. Dieser IAP funktionierte bis vor ca. 1 Monat gut. Danach kamen immer wieder Meldungen von Usern, dass der IAP nicht richtig funktioniert und der zusätzliche Funktionsumfang nicht freigeschaltet wird.
Grundsätzlich betrachte ich hier den Fall des "erneuten Kaufes" (also erneuten kostenlosen Aktivierens der Funktion), so wie es aussieht tritt dieser Fehler aber auch beim Neukauf auf. Die beschriebenen Effekte scheinen unabhängig vom Device zu sein.
Ich habe das dahin gehend eingrenzen können, dass (in der Sandbox) reproduzierbar der Status SKPaymentTransactionFailed mit dem Fehlercode Cancelled (Code=2 "Verbindung mit iTunes Store nicht möglich") auftritt. Dem User wird eine Mitteilung gezeigt (und zwar gleichzeitig oder kurz bevor die updateTransactions:-Methode angesprungen wird), dass der Kauf noch nicht heruntergeladen wurde ("OK") - Achtung: Es erscheint NICHT der Hinweis "wurde schon gekauft und kann kostenlos noch einmal herunter geladen werden - OK/Cancel".
Laut TN2259 tritt dieses Verhalten auf, sofern nach dem Handling der Transaktion nicht finishTransaction: aufgerufen wurde.
Ich habe das inzwischen 1000 Mal geprüft - finishTransaction: WIRD aufgerufen und im Übrigen passiert das mit jedem Testuser, mit dem ich es bisher ausprobiert habe.
Um der Sache auf den Grund zu kommen, habe ich meinen IAP-Prozess in eine eigene Klasse überführt und dabei neu geschrieben. Es hat sich allerdings weder im Handling, noch an dem beobachteten Phänomen etwas getan.
Und nun geht's mit den Merkwürdigkeiten erst richtig los:
1. Ich habe ein neues, leeres Projekt angelegt, das den gleichen Namen und die gleiche BundleID hat, wie das fehlerhafte Projekt. Es ist nur halt im Längen kleiner, denn aus einem ViewController mit "Buy"-Button und einem Label für das Ergebnis enthält die App nichts, als meine IAP-Klasse. Die andere App wird vom Device entfernt. Ich tue dort nun (wie gesagt: mit der IAP Klasse, die auch in der "großen" App enthalten ist) genau das gleiche, wie in der anderen, verwende die gleichen IAP-BundleID, den gleichen Testuser. Ergebnis: Der Kauf funktioniert ohne Weiteres!!
2. Ich ändere in meinem "großen" Projekt nur die BundleID auf ein anderes IAP-Item, das ich testweise (und auch non-consumable) angelegt habe. Auch hier funktioniert der Kauf einwandfrei!!
3. Ändere ich die IAP-BundleID zurück auf den vorigen Wert: Fehlschlag.
4. Und jetzt der Knaller zum Schluss: Wenn ich aber nach dem Fehler in updateTransactions: nach dem Auftreten des Fehlers [[SKPaymentQueue defaultQueue] restoreCompletedTransactions] aufrufe (gleicher Testuser), wird der Kauf ohne Weiteres wieder hergestellt!
Was soll man davon halten? Ich habe meinen Code über und über gecheckt. Ich habe alles, außer der IAP-Funktionen völlig auskommentiert, ich habe gesehen, ob ich irgendwo Speicherfehler baue - nichts, kein Erfolg.
Wie gesagt, langsam gehen mir die Ideen aus. Ihr könnt bitte auch gern Raten ...