2.2.2
iOS
BuySubscriptionは、月次サブスクリプションから年次サブスクリプションに変更するときに解決する必要があります。エラーを拒否して返すのではなく、catch句を強制します。
現在1つのプランにサブスクライブしている場合、別のプランに変更すると、buySubscriptionは次のエラーをキャッチして返します。
実機、iPhone 6
これは、サブスクリプションの変更ダイアログボックスがアプリ内にポップアップし、現在のサブスクリプションから新しく選択したサブスクリプションに変更するかどうかを尋ねるときに発生します。 このダイアログをタップすると、予想される解決済みの約束の代わりにエラーがスローされます。 このユースケースは説明されていないようです。
これらのケースの領収書を実際に購入したことを確認したり検証したりする方法がないため、これは今のところ私にとっては壊れています。 回避策や修正方法を知っている場合、または私にできることがあれば教えてください(Obj-Cの経験はありませんが)。 今のところ考えられる唯一の回避策は、buySubscriptionsがエラーを返し、このエラーをチェックし、このエラーと一致する場合は購入を確認することです。 ただし、これはレシートの検証を不可能にし、他のエラー(サーバーに接続できないなど)によって同じエラーコードが生成され、実際に料金を支払うことなくユーザーにサブスクリプションが提供されるため、非常に危険です。 つまり、現時点では実行可能な回避策は考えられません。 ここで何かが足りませんか? BuySubscriptionsからの約束を解決する必要がない理由はありますか? 誰かから聞いてとてもありがたいです。
編集:これは私がすでに説明したことの明らかな結果かもしれませんが、サブスクリプションを変更しようとした後、この購入は購入履歴に追加されません。 この購入が成功していないことをユーザー側に示すものはありません。ユーザーはダイアログボックスの購入フローを正常に続行し、「これで完了です」と終了します。
EDIT2 :時々それは動作しますが、再現する方法がまだわかりません。方法が見つかった場合は報告します。 それが機能すると、最初のダイアログボックスがパスワードを要求し、最初のダイアログボックスが「購入の確認」でサブスクリプションを変更するかどうかを尋ねる場合とは対照的に、別のサブスクリプションをまだ持っていないかのように通常どおり続行します。動作していないときに表示されるもの。 それが機能すると、購入したサブスクリプションが期待どおりに購入履歴に追加されます。
EDIT3 :以前に間違ったエラーメッセージの写真を撮りました。 修正しました。 エラーメッセージには、「エラー:不明または予期しないエラーが発生しました。しばらくしてからもう一度お試しください。」と表示されます。 また、react-native-in-app-utilsで商品を購入するために使用される方法を検討することもできます。 彼らは異なる方法を使用しており、その違いはなぜこれが起こっているのかを説明するのに役立つかもしれませんが、私はそのライブラリを使用したことがないので、そこでは起こらないことを確認できません。
2.3.15
ある最近のバージョンを今試してみませんか?
ええ、今日のある時点でそれを試してみます
@kevinEsherickこれの結果はどうですか?
まだ動作していません。 毎月購読していて、毎年に切り替えると、catch句が適用されます。 ランダムに機能したものの、再現する方法がまだ見つからない場合があります。 私が見つけたものについてあなたに最新の情報を提供し続けます、そして私のために同じことをしてください。 ありがとう!
@kevinEsherickサブスクリプションをどのように「切り替え」
iOSでは、設定アプリに移動してサブスクリプションを管理し、同じグループ内の別の製品を選択して、サブスクリプションを切り替えることはできませんか?
@JJMoonいいえ、アプリ内で月額サブスクリプションを購入してから、アプリ内で
私もこの問題に直面しています。 何か進展はありますか?
いいえ。最近、それに対処する時間があまりありませんでした。 すぐにまた調べます。
いくつか調べてみると、Appleはサブスクリプションの変更を少なくともある程度は認識しているようだと気づきました。 たとえば、月次から年次に切り替えると、サブスクリプションの変更に関する適切なモーダルと言語が表示されます。 毎年購入するとエラーが発生し、buySubscriptionが解決しません。 しかし、もう一度購入に戻ると、今度は月額サブスクリプションに戻ります。AppleのAPIは、私が年次サブスクリプションを使用していることを認識し、「サブスクリプションを変更しますか...」というモーダルを再び表示します。 これはすべてサンドボックス化されているため、これが本番環境でどのように現れるかはまだわかりません。 これについては今夜のある時点でさらに詳しく調べますが、これはApple側で問題がなく、クライアント側でのエラーにすぎないことを意味している可能性があります。 この場合、これは重大なバグではなくなった可能性がありますが、それでも修正が必要です。
今日ももう一度調べてみたところ、何か注目すべきことがあったと思います。 起こっているように見えるのは、このエラーで見つかったものです: //github.com/bizz84/SwiftyStoreKit/issues/269。 同じグループ内の自動更新サブスクリプションを切り替える場合、現在のサブスクリプションの有効期限が切れるまでユーザーに請求が行われないため、トランザクションは実行されません。 ただし、正常に登録されており、現在のサブスクリプションが終了すると支払いが処理されますが、それまでは処理されません。 したがって、実際にはまだトランザクションが発生していないため、トランザクションは失敗しました。 したがって、支払いプロセスで実際に問題が発生しているとは思いません。バウンスされたトランザクションがエラーとして登録されているだけです。 しかし、これを偶然見つけたばかりで、デバッガーが動作していて遅くなっているので、まだテストしていません。明日まで整理するつもりはありません。 その間に誰かが確認を試みることができれば素晴らしいでしょう(つまり、サブスクリプションを切り替えて、最初のトランザクションが期限切れになったときに2番目のトランザクションが購入履歴に表示されるかどうかを確認するなど)。 これが起こっているのであれば、それを処理する方法を見つけられれば素晴らしいと思います。 生成されるエラーがこのプロセスに固有である場合は、promiseの戻り値としてそれを渡すだけで、適切に処理できます(たとえば、ユーザーにエラーメッセージを生成しない、ユーザーサブスクリプション情報を更新する)。 これがチェックアウトするかどうか、そしてどのように進めるかについての誰かの考えを聞いてみたいです。
IAPサブスクリプションを変更するときは、このドキュメントのURLを使用してください。
https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Subscriptions.html
ユーザーがサブスクリプションを管理できるようにします。
https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Subscriptions.html#//apple_ref/doc/uid/TP40008267 -CH7-SW19
これはこの問題を処理するために機能しますか?
この問題は、私が述べた方法で処理できることを願っています。
閉鎖...
同じ動作がありますが、これを解決するための手順はありますか?
最も参考になるコメント
今日ももう一度調べてみたところ、何か注目すべきことがあったと思います。 起こっているように見えるのは、このエラーで見つかったものです: //github.com/bizz84/SwiftyStoreKit/issues/269。 同じグループ内の自動更新サブスクリプションを切り替える場合、現在のサブスクリプションの有効期限が切れるまでユーザーに請求が行われないため、トランザクションは実行されません。 ただし、正常に登録されており、現在のサブスクリプションが終了すると支払いが処理されますが、それまでは処理されません。 したがって、実際にはまだトランザクションが発生していないため、トランザクションは失敗しました。 したがって、支払いプロセスで実際に問題が発生しているとは思いません。バウンスされたトランザクションがエラーとして登録されているだけです。 しかし、これを偶然見つけたばかりで、デバッガーが動作していて遅くなっているので、まだテストしていません。明日まで整理するつもりはありません。 その間に誰かが確認を試みることができれば素晴らしいでしょう(つまり、サブスクリプションを切り替えて、最初のトランザクションが期限切れになったときに2番目のトランザクションが購入履歴に表示されるかどうかを確認するなど)。 これが起こっているのであれば、それを処理する方法を見つけられれば素晴らしいと思います。 生成されるエラーがこのプロセスに固有である場合は、promiseの戻り値としてそれを渡すだけで、適切に処理できます(たとえば、ユーザーにエラーメッセージを生成しない、ユーザーサブスクリプション情報を更新する)。 これがチェックアウトするかどうか、そしてどのように進めるかについての誰かの考えを聞いてみたいです。