React-native-iap: Es kann keine Verbindung zum iTunes Store für Sandbox-Benutzer hergestellt werden

Erstellt am 2. Okt. 2018  ·  17Kommentare  ·  Quelle: dooboolab/react-native-iap

Version von react-native-iap

2.2.2

Plattformen, auf denen Sie den Fehler hatten (IOS oder Android oder beides?)

iOS

Erwartetes Verhalten

await RNIap.buyProduct(MIXED_PACK); sollte nicht scheitern

Tatsächliches Verhalten

Ich erhalte den Fehler Cannot connect to iTunes Store auch wenn ich einen Sandbox-Benutzer verwende

Getestete Umgebung (Emulator? Reales Gerät?)

Echtes Gerät, iPad und iPhone 7

Schritte zum Reproduzieren des Verhaltens

Versuchen Sie einfach, diesen Code auszuführen. Ich habe den Blog gründlich gelesen, um hier eine Sandbox-Umgebung zu erstellen: https://medium.com/@dooboolab/react -native-in-app-purchase-121622d26b67

📱 iOS 🙏 help wanted

Hilfreichster Kommentar

Wenn Sie auf ein Problem stoßen, beachten Sie auch: "Ihre App wird im Simulator ausgeführt, der den In-App-Kauf nicht unterstützt." ist ein weiterer Grund, warum Sie diesen Fehler erhalten können. Muss dies auf einem realen Gerät tun.

Alle 17 Kommentare

Ich denke, es ist eine alte Verbindung. https://developer.apple.com/system-status/

@ raynor85 Stehen Sie immer noch vor diesem Problem?

@dooboolab Ich bin immer noch mit dem Problem konfrontiert, aber ich denke, es ist ein Apple-Problem. Ich habe versucht, ein Produkt mit meinem persönlichen Apple ID-Benutzer zu kaufen (der zuvor für echte Einkäufe verwendet wurde), und konnte nach Ausführung von RNIap.buyProduct(“my.sku.product”) eine erfolgreiche Antwort erhalten.
Das Lustige ist, dass das Modal, das kurz vor dem Kauf auftaucht, environment: sandbox , wahrscheinlich weil ich einen Entwickler-Build ausgeführt habe, und vor allem denke ich, dass mir der Kauf überhaupt nicht in Rechnung gestellt wurde. Wenn ich die Kaufhistorie überprüfe, gibt es nichts damit zu tun, und wenn ich RNIap.getAvailablePurchases() und RNIap.getPurchaseHistory() ausführe, habe ich von beiden leere Antworten erhalten. Warum das?

@dooboolab kannst du mir dabei helfen? Gibt es einen Grund, warum ich mit einer echten Apple-ID ein Verbrauchsmaterial erfolgreich kaufen konnte, ohne dass es in Rechnung gestellt wurde, aber RNIap.getPurchaseHistory() ist immer ein leeres Array?

@ raynor85 Haben Sie das Transaktionsergebnis mit Ihrem Server verbunden?

@dooboolab Ich habe versucht, sowohl RNIap.buyProduct(sku) als auch RNIap.buyProductWithoutFinishTransaction(sku) mit RNIap.finishTransaction() , und für beide habe ich RNIap.validateReceiptIos(receiptBody, true); mit const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'}; , aber kein Glück. Es ist auch erwähnenswert, dass die Antwort von validateReceiptIos immer dieselbe ist, egal welches Passwort ich in '[apple-id-password]'
Dies ist ein Beispiel:

{ receipt: 
   { receipt_type: 'ProductionSandbox',
     adam_id: 0,
     app_item_id: 0,
     bundle_id: 'io.fantastec.swap',
     application_version: '8',
     download_id: 0,
     version_external_identifier: 0,
     receipt_creation_date: '2018-10-09 19:16:09 Etc/GMT',
     receipt_creation_date_ms: '1539112569000',
     receipt_creation_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
     request_date: '2018-10-09 19:16:10 Etc/GMT',
     request_date_ms: '1539112570436',
     request_date_pst: '2018-10-09 12:16:10 America/Los_Angeles',
     original_purchase_date: '2013-08-01 07:00:00 Etc/GMT',
     original_purchase_date_ms: '1375340400000',
     original_purchase_date_pst: '2013-08-01 00:00:00 America/Los_Angeles',
     original_application_version: '1.0',
     in_app: 
      [ { quantity: '1',
          product_id: 'basic_pack',
          transaction_id: '1000000455003078',
          original_transaction_id: '1000000455003078',
          purchase_date: '2018-10-09 19:16:09 Etc/GMT',
          purchase_date_ms: '1539112569000',
          purchase_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
          original_purchase_date: '2018-10-09 19:16:09 Etc/GMT',
          original_purchase_date_ms: '1539112569000',
          original_purchase_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
          is_trial_period: 'false' } ] },
  status: 0,
  environment: 'Sandbox' }

Wie Sie vielleicht bemerkt haben, receipt_type: 'ProductionSandbox' , was darauf zurückzuführen sein sollte, dass ich in einer Sandbox-Umgebung einen echten Apple ID-Benutzernamen verwende (ich kann keinen funktionierenden Test-Sandbox-Benutzer erstellen. Vielen Dank an Apple für die Erstellung unser Leben eine lebendige Hölle).

@ raynor85 Eigentlich weiß ich nicht, warum das passiert. Möglicherweise muss ich das in naher Zukunft ausprobieren. Haben Sie auch versucht, dies durch den Testflug zu testen? Wenn Sie die App nicht auf test flight hochgeladen haben, kann dies passieren. Ich stimme auch Ihrem letzten Zitat zu!

Ich habe nicht versucht, die App auf testFlight hochzuladen, da ich eine Entwicklungsversion haben möchte, mit der ich arbeiten kann, bevor ich möglicherweise einen defekten Beta-Build hochlade. Vielleicht könnte Codepush in diesem Fall nützlich sein. Wie auch immer, können Sie bitte die Bedeutung von const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'} erklären? Ich habe versucht, ein Passwort einzugeben, und erhalte immer noch das gleiche Ergebnis. Stellt password das Apple-ID-Passwort des Benutzers dar? Wenn dies der Fall ist, wie kann ich diese Informationen erhalten, ohne den Benutzer zu bitten, sie einzufügen?

Und was ist mit accessToken , das für validateReceiptAndroid ? Ich habe den von Ihnen erwähnten erstaunlichen Beitrag zum Stapelüberlauf überprüft, aber es gibt keine klare Anleitung, wie ich das accessToken erhalten kann. Empfehlen Sie einen absolut einfachen Weg, um dieses access_token zu erhalten, ohne unbedingt einen Server zu erstellen? Das Dokument besagt, dass es möglich ist, eine Empfangsüberprüfung direkt auf dem Gerät durchzuführen: https://developer.android.com/google/play/billing/billing_library_overview

@ raynor85

  1. Sie können die Validierung des Belegs
  2. Ich habe das eigentlich nicht versucht. Ich habe diese Funktion für andere Entwickler entwickelt, um einen einfachen Beitrag zu leisten, die sich dieser Dinge bewusst sind. Ich denke jedoch, dass Sie die accessToken über die Spielkonsole erhalten können. Sie können dies erhalten, indem Sie den folgenden Prozess ausführen.
    Wählen Sie Ihre App> Dienste & APIs> "IHR LIZENZSCHLÜSSEL FÜR DIESE ANWENDUNG Base64-codierter öffentlicher RSA-Schlüssel, der in Ihre Binärdatei aufgenommen werden soll". Referenz .

Versuchen Sie auch 2.3.5 als Quittungsvalidierung in Android. Der Parameter hat eine falsche Identität in transactionReceipt für Android gesendet. Ich hoffe, Sie können mit diesem etwas üben und Ihre Erfolgsgeschichte in unserer Readme-Datei teilen. Prost!

@ raynor85 Ich kann auch keine Antwort von purchaseHistory () oder getAvailablePurchases () erhalten. Ich frage mich, ob diese Funktionen erst funktionieren, wenn die App in Produktion ist. @JJMoon Sollten diese Funktionen im Sandbox-Modus funktionieren?

Ich habe herausgefunden, dass ich "finishTransaction ()" nicht aufgerufen habe, also steckte ich in einer Schleife auf meinem Sandbox-Testkonto "Kauf war erfolgreich", aber auf Apples Seite nicht vollständig verarbeitet. Sie nannten es eine tote Schleife.

Dieser Thread ist etwas aus der Spur geraten, aber ich sehe den gleichen ursprünglichen Fehler, wenn ich die App über xcode auf meinem Gerät mit einem Sandbox-Konto ( Error: Cannot connect to iTunes Store ) ausführe. Ich bin am 2.3.19, was ich für das neueste halte.

Ein Hinweis von Apple zu diesem Fehler: https://developer.apple.com/library/archive/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228 -CH1-ERROR_MESSAGES-CANNOT_CONNECT_TO_ITUNES_STORE

Ich denke, in meinem Fall wird dieser Fehler angezeigt, wenn ich versuche, ein Produkt zu abonnieren, wenn ich es bereits abonniert habe. Es scheint auch zu erscheinen, wenn ich abonniert bin und versuche, mein Abonnement zu ändern (indem ich eine neue RNIAP.buySubscription -Anforderung initiiere.

Wenn Sie auf ein Problem stoßen, beachten Sie auch: "Ihre App wird im Simulator ausgeführt, der den In-App-Kauf nicht unterstützt." ist ein weiterer Grund, warum Sie diesen Fehler erhalten können. Muss dies auf einem realen Gerät tun.

Ich denke, in meinem Fall wird dieser Fehler angezeigt, wenn ich versuche, ein Produkt zu abonnieren, wenn ich es bereits abonniert habe. Es wird auch angezeigt, wenn ich abonniert bin und versuche, mein Abonnement zu ändern (indem eine neue RNIAP.buySubscription-Anforderung initiiert wird.

Also, was solltest du in diesem Fall tun? Woher weiß ich, ob das Produkt tatsächlich vom Benutzer gekauft wurde? Ich habe versucht, Einkäufe wiederherzustellen, aber nichts scheint sich zu ändern

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen