Freies IAP für Bestandskunden: Wie testen?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Freies IAP für Bestandskunden: Wie testen?

    Hallo zusammen,

    ich brauche Eure Hilfe zum Thema "Freischalten eines IAP-Features für Bestandskunden". Allerdings weniger in der Umsetzung als mehr in der Frage des Testens...

    Wie hier erwähnt, möchte ich auch in einer neuen Version meiner - bisher kostenpflichtigen - App verfahren: Die Applikation soll mit dem nächsten Update kostenlos werden. Bestimmte Features lassen sich dann per IAP freischalten. So spare ich mir das parallele Bereitstellen einer Test- und Vollversion und ein Käufer wechselt nicht von einer in eine andere Applikation.

    Gelöst habe ich das Ganze mittels Receipt-Validierung über Receigen: Bei Prüfung des Receipts und der enthaltenen In-App-Käufe frage ich die Bundle-Version des ursprünglichen Kaufes ab [receipt_dict objectForKey:<prefix>_InApp_RECEIPT_ATTRIBUTETYPE_ORIGINAL_APPLICATION_VERSION]. Diese vergleiche ich mit der aktuellen Version und wenn sich ergibt, das der Käufer ein Bestandskunde ist, schalte ich die Zusatzfeatures ohne IAP frei:

    Quellcode

    1. // RECEIPT_ATTRIBUTETYPE_ORIGINAL_APPLICATION_VERSION corresponds to the value of CFBundleVersion (in iOS) or CFBundleShortVersionString (in macOS) when the purchase was originally made. In sandbox environment, the value is always “1.0”.
    2. NSString *purchasedVersion = [receipt_dict objectForKey:STB_InApp_RECEIPT_ATTRIBUTETYPE_ORIGINAL_APPLICATION_VERSION];
    3. #pragma warning Required IAP Version for testing "1.0" (bundle version from sandbox)
    4. // NSString *requiresIAPVersion = @"2000";
    5. NSString *requiresIAPVersion = @"1.0";
    6. DebugLog(@"Purchased version: %@", purchasedVersion);
    7. if ([requiresIAPVersion compare:purchasedVersion options:NSNumericSearch] == NSOrderedDescending)
    8. {
    9. // App was purchased before introducing IAP (former customer), IAP features are available
    10. DebugLog(@"Former customer of %@, purchased version %@, IAP required starting %@", identifier, purchasedVersion, requiresIAPVersion);
    11. self.proPurchaseState = PURCHASE_DONE;
    12. }
    Alles anzeigen
    Was mir mir Kummer macht, ist die Frage des Testens: Ich möchte keinen Code produktiv setzen, den ich nicht getestet habe. Allerdings liefert der App-Store im Sandbox-Environment immer "1.0" als CFBundleVersion der originären Version zurück. Wie soll ich also vernünftig testen, dass mein Code nicht irgendeinen dummen Lapsus enthält? Wie ihr oben sehen könnt, habe ich den Vergleich momentan so manipuliert, dass ich zumindest mit einem anderen Wert teste (und mir ein #pragma warning zur Erinnerung gesetzt), aber schön ist das nicht.

    Gibt es wenigstens eine Chance, wie ich mir das Receipt der aktuellen Version (aus dem Store) einmal ansehen kann? Leider funktioniert das Quick Look Plugin von Receigen zumindest bei mir nicht...

    Mattes

    Edit: Momentan ist meine beste Idee ein "staged rollout" und dann hoffen ... sehr unprofessionell :(
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Wieder beweist das Forum seine selbstheilende Wirkung :)

    Ich musste das Quick Look Plugin von einer anderen App, das sich auch für den UTI public.data verantwortlich fühlte, löschen. Nun zeigt mir Receigen auch das Zertifikat meiner Entwicklungs-App an, nachdem ich ihren Container vom iPhone auf den Mac exportiert habe.

    Bleibt die Frage, wie ich dies bei einer offiziellen App aus dem Store (der Vorgängerversion) schaffe ... oder andere gute Tipps, den o. g. Fall zutesten.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ich hab das noch nie selbst getestet aber dürfte es nicht funktionieren, wenn du deine App via TestFlight zur Verfügung stellst? Also vorher lädst du dir die alte Version und dann updatest du via TestFlight.

    Die Daten bleiben erhalten. Ob das dann immer noch Sandbox ist ist so ne Frage.

    Andere Variante wäre freischalten aber nur für bestimmte Geräte. Das geht seit kurzem ohne das man was beantragen muss. Ganz einfach beim App hochladen kann man die Verfügbarkeit auswählen. Und da kann man auch sagen nur verfügbar für Leute mit Apple-ID XY.

    Das wären meine 2 Ideen.
  • AppleDeveloper schrieb:

    Andere Variante wäre freischalten aber nur für bestimmte Geräte. Das geht seit kurzem ohne das man was beantragen muss. Ganz einfach beim App hochladen kann man die Verfügbarkeit auswählen. Und da kann man auch sagen nur verfügbar für Leute mit Apple-ID XY.
    Das klingt sehr gut, ich werde das mal recherchieren: Die Begrenzung auf bestimmte IDs war mir neu.

    Variante 1 dürfte nach meinem Verständnis immer noch gegen die Sandbox laufen...

    Danke :)

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.