2.2.2
(iOSでは#279が原因で新しいバージョンが失敗するため)
iOS
エラーはスローされません。 購入は成功しました(ライブおよび実稼働中)
E_UNKNOWN
エラーがPromiseから返されます
Sentry.ioエラー追跡はこれを報告します:
{"framesToPop":1,"code":"E_UNKNOWN","nativeStackIOS":["0 LuCoaching 0x000000010062f6fc LuCoaching + 1996540","1 LuCoaching 0x000000010060aa98 LuCoaching + 1845912","2 LuCoaching 0x00000001007cad98 __cxa_throw + 438380","3 LuCoaching 0x00000001007cc62c __cxa_throw + 444672","4 libdispatch.dylib 0x000000019d078484 <redacted> + 16","5 libdispatch.dylib 0x000000019d025610 <redacted> + 56","6 LuCoaching 0x00000001007cc46c __cxa_throw + 444224","7 libdispatch.dylib 0x000000019d0776c8 <redacted> + 24","8 libdispatch.dylib 0x000000019d078484 <redacted> + 16","9 libdispatch.dylib 0x000000019d0249ec <redacted> + 1068","10 CoreFoundation 0x000000019d5ce1bc <redacted> + 12","11 CoreFoundation 0x000000019d5c9084 <redacted> + 1964","12 CoreFoundation 0x000000019d5c85b8 CFRunLoopRunSpecific + 436","13 GraphicsServices 0x000000019f83c584 GSEventRunModal + 100","14 UIKitCore 0x00000001ca444bc8 UIApplicationMain + 212","15 LuCoaching 0x000000010044d110 LuCoaching + 20752","16 libdyld.dylib 0x000000019d088b94 <redacted> + 4"],"userInfo":{"NSLocalizedDescription":"Verbindung mit iTunes Store nicht möglich"},"domain":"SKErrorDomain","line":26,"column":1877,"sourceURL":"/var/containers/Bundle/Application/818C8439-E250-42E8-AD57-EC4FB5FE5547/LuCoaching.app/main.jsbundle"}
実デバイス。 ライブ顧客。 非常に一貫性がない
サンドボックスユーザーで手順をテストすると、エラーを再現できません。
@ Gaia-Nutritionこの古い問題をチェックしていただけませんか? 同じ原因かもしれません。
https://github.com/dooboolab/react-native-iap/issues/201
#201の@JJMoonは、エラーがE_DEVELOPER_ERROR
あり、 getSubscriptions()
を使用してvalidProducts
リストにデータを入力しなかったことが原因getSubscriptions()
。
ただし、チェックアウトを実行する前に関数を呼び出しているので、別のエラーが発生します。
しかし今、私はそれについて考えます。 getSubscriptions()
とbuySubscription()
呼び出しの間に、ユーザーが購入を実行するかどうかを再検討することにより、かなりの時間遅延が発生する可能性があります。 これは問題になる可能性がありますか? その間、アプリはバックグラウンドになっている可能性があります。
編集:しかし、再び購入は正常に実行されるため、問題はアプリストアの応答が処理されている場所である必要があります
こんにちは、
「buyProductWithoutFinishTransaction」または「buyProduct」と同じ問題の動作。
バージョン2.2.1
保存されたリターンは{
"framesToPop": 1,
"code": "E_UNKNOWN",
"nativeStackIOS": [...],
"userInfo": {
"NSLocalizedDescription": "Connexion à l’iTunes Store impossible"
},
"domain": "SKErrorDomain",
"line": 16,
"column": 1599,
"sourceURL": "..."
}
以前のバージョンの本番環境でこのバグを再現したため、モジュールを更新しました。
興味深いのは、これが発生すると、ユーザーの復元購入も失敗することです。 iOSユーザーの約1%にしか発生しません。
@fierysolid同じケースですが、iOSでの購入の約5%が失敗しました。 顧客が再度購入しようとすると、復元購入ポップアップが表示されます。
皆さんこんにちは。 今日の新しいバージョンである2.3.15
修正されることを願っています。 iOSでNSDictionary
を使用することは、純粋に安全ではなく、予期しない動作を引き起こす可能性があることに気づきました。 私はこれを修正し、すべてのデバイスで問題なく動作することを願っています。 これをテストしてください。
それでも問題が発生する場合は、再度開いてください。
@dooboolab
iPhone 6SのサンドボックステスターユーザーでbuySubscription()
を使用しているときにも、この問題が発生します。
{"userInfo":{"NSLocalizedDescription":"Cannot connect to iTunes Store"}}
@danrevahでは、 2.3.15
新しいバージョンを試しましたか? @JJMoonこれをもう一度テストしていただけますか?
@dooboolabはい私はそのバージョンを使用しています。
@danrevah 2.3.16
お試しください。
@dooboolab一度は
@JJMoonこれについて何か手がかりはありますか? 彼はiPhone6Sを使用しています
問題を再開しました。 cc @JJMoon
より多くの人がこの問題に投票する場合、私たちはこれをより深く掘り下げるためにもっと一生懸命努力します。
@danrevahこのドキュメントを参照してください。
https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Subscriptions.html#//apple_ref/doc/uid/TP40008267 -CH7-SW6
サンドボックスモードでサブスクリプションをテストするには、しばらくしてからサブスクリプションを再購入する必要があります。
また、再度購入するにはキャンセルが必要な場合があります。
また、Appleサンドボックスサーバーからの奇妙な反応がいくつかあり、テストがより困難になっています。
@JJMoonの場合が問題である場合は、これを再度閉じることができます。 それでも問題が解決しない場合は、再度開いてください。 @danrevah
@JJMoon私は同じ問題に直面しました。 解決策はありますか? BuySubscriptionは例外をスローしますが、支払いは差し引かれます。 結果を保存して検証するには、結果データが必要です。
@hyochans
+1私は同じ問題を抱えています
buySubscription
でもaddAdditionalSuccessPurchaseListenerIOSを使用してみてください。 これは#307と同じ問題です。
buySubscription
でもaddAdditionalSuccessPurchaseListenerIOSを使用してみてください。 これは#307と同じ問題です。
誰かがすでに本番環境で使用していますか?
@hyochan 、私はそれをやろうとしましたが、成功しませんでした。
if (subscription && subscription.success) {
this.props.subscribe(subscription.result);
} else {
if (Platform.OS === 'ios') {
const sub = RNIap.addAdditionalSuccessPurchaseListenerIOS(async (purchase) => {
this.props.subscribe(purchase); // -> This code is never fired
sub.remove();
});
}
}
@cbfranca実際のコードに従ってください。 promises
も使用していません。 約束が拒否された後は、 addAdditionalSuccessPurchaseListenerIOS
を聞く必要があります。
また、追加のPlatform.OS === 'ios'
は必要ありません。
@hyochan
無知で申し訳ありませんが、正しく理解できていないと思います。 私は自分のシナリオに合わせて、例と同じベースに従いました。 async / awaitを使用してこの約束を処理する抽象化を作成しました。 このサブスクリプションオブジェクトは、私の抽象化によって返されます。
static purchaseSubscription(newSubscriptionID, currentSubscriptionID) {
if (Platform.OS === 'ios') {
const purchaseResult = KinvoBilling.purchaseSubscriptionIOS(newSubscriptionID);
return purchaseResult;
}
const purchaseResult = KinvoBilling.purchaseSubscriptionANDROID(newSubscriptionID, currentSubscriptionID);
return purchaseResult;
}
static purchaseSubscriptionANDROID = async (newSubscriptionID, currentSubscriptionID) => {
const hasCurrentSubscription = currentSubscriptionID !== null;
if (hasCurrentSubscription) {
const purchaseResult = KinvoBilling.updateSubscription(newSubscriptionID, currentSubscriptionID);
return purchaseResult;
}
const purchaseResult = KinvoBilling.buySubscription(newSubscriptionID);
return purchaseResult;
}
static purchaseSubscriptionIOS = async (subscriptionID) => {
await KinvoBilling.getSubscriptions();
const purchaseResult = await KinvoBilling.buySubscription(subscriptionID);
return purchaseResult;
}
@cbfranca
`` `
static PurchaseSubscriptionIOS = async(subscriptionID)=> {
KinvoBilling.getSubscriptions();を待つ
{を試してください
const PurchaseResult = await KinvoBilling.buySubscription(subscriptionID);
} catch(err){
const Subscription = RNIap.addAdditionalSuccessPurchaseListenerIOS(async(purchase)=> {
// dooboolab =>ここで呼び出しを確認します。
this.setState({レシート:purchase.transactionReceipt}、()=> this.goToNext());
Subscription.remove();
}
}
PurchaseResultを返します。
}
「」
上記のコードを確認してください。 ライフサイクルに合わせてコードをリファクタリングする必要があると思います。
@hyochan私には
私のテストシナリオは次のとおりです。
もう1つの疑問:サブスクリプションでもfinishTransaction()を使用する必要がありますか?
このエラーも表示されます。 そして、私はそれを再現する一つの方法を知っていると思います。
^ 2.4.1
https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz
iOS、実際のデバイスでTestFlightでテストする場合。
アプリでRNIap関数が呼び出されると、iOSが以前のiTunes / App Storeユーザーのパスワードを入力するように要求することに気付きました(その後、ログアウトしてiOS設定で置き換えました)。 これはiPhoneユーザーを悩ませている問題だとオンラインで読んだことがあります。1つのiTunesアカウントでアプリを購入した後、電話を新しいiTunesアカウントに切り替えても、アプリは引き続きパスワードを要求します。古いiTunesアカウント。
アプリ(およびTestFlight)を削除し、新しいAppStoreユーザーで再インストールしようとしましたが無駄になりました。 この動作を取り除く唯一の方法は、デバイスをワイプすることでした。 これを実行すると、このエラーを再現できなくなりました。
{
code: E_UNKNOWN,
column: 1565,
domain: NSURLErrorDomain,
framesToPop: 1,
line: 20,
nativeStackIOS: [...],
sourceURL: ...,
userInfo: {
_kCFStreamErrorCodeKey: -4,
_kCFStreamErrorDomainKey: 4,
NSErrorFailingURLKey: None,
NSErrorFailingURLStringKey: https://p100-sandbox.itunes.apple.com/WebObjects/MZFinance.woa/wa/inAppBuy,
NSLocalizedDescription: Cannot connect to iTunes Store,
NSUnderlyingError: {
code: "-1005",
domain: "kCFErrorDomainCFNetwork",
message: "underlying error",
nativeStackIOS: [...],
userInfo:{"NSErrorPeerAddressKey":null,"_kCFStreamErrorCodeKey":-4,"_kCFStreamErrorDomainKey":4}
}
}
}
これが誰かを助けることを願っています!
@hyochan
多くのことを試した後、私はまだ同じ問題などを抱えています。 以下のコードでは、RNIap.buySubscription(sku)はundefinedを返します。 誰かがそれを解決しましたか?
`` `
static PurchaseSubscriptionIOS = async(subscriptionID)=> {
KinvoBilling.getSubscriptions();を待つ
try {
const purchaseResult = await RNIap.buySubscription(subscriptionID);
return createResponse(true, purchaseResult);
} catch (error) {
const subscription = RNIap.addAdditionalSuccessPurchaseListenerIOS(async (purchase) => {
// dooboolab => check the call here.
console.tron.log('--- ERROR ----');
console.tron.log(error);
console.tron.log('--- PURCHASE ----');
console.tron.log(purchase);
const result = purchase;
subscription.remove();
console.tron.log(result);
if (result) {
return createResponse(true, result);
}
return createResponse(false, result);
});
}
};
`` `
:+1:この問題は問題なく発生しています。 現在、ユーザーの約10%に発生しているようです。 このリスナーを追加してみますが、最終的にはこれが優れたソリューションだとは思いません。 @hyochanこれがスローされた場合に、より詳細な情報を取得する方法はありますか、それともStoreKit APIからの標準的な応答ですか? 購入が成功した場合でも、すべてのエラーケースで「iTunesStoreに接続できません」というメッセージが表示されます。
3.4.6でも非常によく似た問題があります。最初の購入試行はE_UNKOWN
で失敗し、再試行は成功します。 ただし、これはbuyProduct
ではなく、 buySubscription
ます。 @hyochanこれはまだ同じ根本原因である可能性がありますか?
こんにちは! RNIap.requestSubscription()を呼び出した後、同じ問題が発生します。未定義の結果が表示されますが、支払いは成功し、クレジットカードに請求されます。
そのユーザーがそれを乗り越える唯一の方法は、購入を復元することです。
誰かがこれを修正しましたか? バージョン3.5.9を使用しています
最も参考になるコメント
:+1:この問題は問題なく発生しています。 現在、ユーザーの約10%に発生しているようです。 このリスナーを追加してみますが、最終的にはこれが優れたソリューションだとは思いません。 @hyochanこれがスローされた場合に、より詳細な情報を取得する方法はありますか、それともStoreKit APIからの標準的な応答ですか? 購入が成功した場合でも、すべてのエラーケースで「iTunesStoreに接続できません」というメッセージが表示されます。