IAP Merkwürdigkeiten

  • IAP Merkwürdigkeiten

    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.

    :huh:

    Wie gesagt, langsam gehen mir die Ideen aus. Ihr könnt bitte auch gern Raten ... :)
  • Nur um es mal kurz zusammen zu fassen:

    - Es geht nicht mit der App un dem original IAP Bundle
    - Es geht mit einer Testapp und dem original IAP Bundle
    - Es geht mit der App un einem test IAP Bundle

    Soweit richtig ?

    und das hast du mehrfach gegengetestet ? Weil es hört sich ja so an, als wenn der Fehler nicht wirklich immer auftritt. Gibt es keine Gemeinsamkeiten bei den Geräten, iOs Versionen wo das passiert ?

    Kannst Du den Fehler jetzt bei Dir reprodutieren oder must du immer einen Testuser testen lassen ?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    - Es geht nicht mit der App un dem original IAP Bundle
    - Es geht mit einer Testapp und dem original IAP Bundle
    - Es geht mit der App un einem test IAP Bundl
    Soweit richtig ?
    Ja.

    Thallius schrieb:

    und das hast du mehrfach gegengetestet ?
    Ja. Seitdem ich dieses Thema hier bereits einmal gepostet habe andauernd.

    Thallius schrieb:

    Weil es hört sich ja so an, als wenn der Fehler nicht wirklich immer auftritt. Gibt es keine Gemeinsamkeiten bei den Geräten, iOs Versionen wo das passiert ?
    Bei mir auf verschiedenen Geräten (v.a. iPod touches 2G und 4G, auch iPhone 3GS) und OS-Versionen (4.2.1, 4.3.3).

    Thallius schrieb:

    Kannst Du den Fehler jetzt bei Dir reprodutieren oder must du immer einen Testuser testen lassen ?
    Ich kann es reproduzieren und bei "Testuser" meinte ich einen IAP-Testuser.
  • Hast Du mal versucht die ganze App unter neuem Namen zu erstellen mit neuer Bundle id etc und geschaut was dann passiert ?

    Hast du anderes Apps mit gleichem IAP Code die funktionieren ?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • fwtag schrieb:

    Ja, die besagte Test-App.


    Naja ich dachte eher an eine "richtige". Weil Du glaubst selber ja auch, dass es irgendwie an einer Interaktion mit dem Rest des Codes liegen kann. Auch wenn Du alles schon einmal ausdokumentiert hast, so sind da doch einige Dinge die man nicht mal so eben ausdokumentieren kann, wie z.B. Resourcen oder pilists oder sowas.

    Du wolltest das wir raten. Ich schreibe gerade halt einfach nur meine Gedanken auf.

    Du kannst ja auch schritt für schritt den Code deiner App jetzt in die Testapp implementieren. Irgendwann muss es dann entweder fertig sein, oder eben nicht mehr gehen. Da sehe ich die einzige Möglichkeit den Fehler weiter einzugrenzen.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)