問題タブ [skdownload]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 購入済みコンテンツの SKDownload を取得する方法
ホストされたコンテンツがある場合のアプリ購入フローの標準は次のとおりです。
これで問題ありません。購入したすべてのコンテンツを復元したいと想像してみてください。これは、アプリを削除して再インストールしたか、単に別のデバイスにインストールしたためです。さて、これは WWDC 2012 セッションでこの件について確認されています。すべての購入を復元すると、復元するコンテンツの完全なリストが表示されますが、おそらくそれらすべてをダウンロードする必要はありません。このような場合、ダウンロードするコンテンツの選択肢をユーザーに提供し、選択した製品の SKDownload をキューに入れる必要があります。ダウンロードが終了し、コンテンツが正常にインストールされたら、トランザクションの終了を宣言できます。セッション ビデオでは、ダウンロードが拒否されたり遅延したりした場合に何をすべきかが語られていませんでした。私の知る限り、SKDownload をどこかに保存して後で取得する方法はなく、iTunes に「この既に購入した製品の SKDownload をください」というようなことを要求する API はありません。したがって、私によると、このケースを回避するには2つのオプションがあります。
他の誰かがこの問題に直面し、より良い解決策を見つけましたか? Apple に機能強化のリクエストを開くのは理にかなっていますか?
macos - Mac で SKDownload のトランザクションを見つける方法は?
iOSではSKDownload
、
@property(nonatomic, readonly) SKPaymentTransaction *transaction
これにより、ホストされているコンテンツがダウンロードされるたびにトランザクションを完了することができます。
ただし、Mac にSKDownload
はそれがないため、 を参照してSKPaymentQueue
、ダウンロードされたトランザクションを探す必要があります。
そうしている方いますか?
問題は、時々「finishTransaction」コードに到達しないことですが、それ以外の方法でそのトランザクションを終了する方法が本当にわかりません! iOS では、ダウンロードに関連するトランザクションを完了するだけなので簡単です。
要約すると、Mac でダウンロードの取引を完了する方法を知っておくとよいでしょう。それは暗黙のうちに起こりますか?
ios - StoreKit SKDownload の進行状況が完了しない
私は現在、ユーザーが Hosted by Apple によってダウンロード可能なコンテンツを購入できるようにするアプリに取り組んでいます。これまでのところ、ユーザーが購入できるという点で私のコードは機能し、ダウンロードは正常に完了し、ファイルはそのままです。
ただし、一部のファイルは非常に大きいため、ダウンロードの進行状況をユーザーに表示したいのですが、SKDownload.progress が約 60% または 80% まで実行された後、突然停止することがわかりました。
私のコードでは、次のことを行っています。
しかし、ログを確認すると、進行状況が表示されますが、ここで停止します。
また、進行状況ラベルをユーザーに表示しています。ユーザーの観点から見ると、ダウンロードを見ているときに、最後に表示される数字が 60 または 80% の場合、実際にはダウンロードされていないと思います。
これに関するヒントはありますか、それともおそらくバグですか?
ありがとうアーロン
ios - アプリがバックグラウンドになった後の SKDownload の問題
私のアプリでは、アプリがアクティブな場合、Apple でホストされているコンテンツのダウンロードはうまくいきます。ただし、バックグラウンドに移行して十分な時間が経過すると、再びアクティブになったときにSKDownload
まだactive
状態がありますが、進行状況は報告されていません。取引がまだ完了していないことを確認しました。
なぜこれが起こるのか誰にも分かりますか?私のデバイスは Wi-Fi に接続されSKDownload
ており、インスタンス変数に保存したため、ダウンロードの状態を確認できました。したがって、バックグラウンドでダウンロードの進行状況を受信できないという問題だけであれば、現在の値を から読み取ることができますmyDownload.progress
。ただし、進行状況はまったく同じであり、更新されていません。
上記のようにSKDownload
変数に保存するので、これは私にとって大きな問題です。重複したダウンロードが開始されるのを防ぐためにそうしています。私のアセットは 150MB を超えているため、ユーザーはアセットのダウンロードにかかる時間を認識せず、アイテムを再度復元/「購入」して 2 回目のダウンロードを開始しようとする可能性があります。そのため、実行中のダウンロードを変数に保存し、新しいトランザクションが完了すると、ダウンロードが既に実行されているかどうかを確認します。ダウンロードが最短時間で完了することを保証する優れた設計です。唯一の問題は、アプリが長時間バックグラウンドにあり、次の状態になった場合に発生します。
- アクティブなレポートをダウンロード
- 対応するトランザクションはまだ終了していません
- なぜかダウンロードが進まない
上記のセーフガードを考えると、ダウンロードが実行されておらず、アプリが重複したアクティブなダウンロードを認識しているため、新しいダウンロードが開始されないため、問題は明らかです。
ダウンロードを再開しようとしましたが、何もしません (状態が一時停止されていないためだと思います)。
更新 1
この問題を解決する方法を見つけましたが、私にはハックのように見えます:
- アプリがバックグラウンドになったらダウンロードを一時停止する
- ストア トランザクション オブザーバーを再度 (!!!) に追加し
applicationWillEnterForeground
ます。 - 一時停止したダウンロードを再開する
2が一番面白い。すべてのストア関連の通知を処理するシングルトンがあります。でトランザクション オブザーバーとして追加し、didFinishLaunchingWithOptions
でのみ削除しwillTerminate
ます。アプリがフォアグラウンド状態になった後、シングルトンが同じであることを確認しました。それでも、ストア オブザーバーとして再度追加しない限り、ダウンロードの再開は見られません。超面白い。
swift - SKPaymentQueueを使用してアプリ内購入を処理した後、SKDownloadのコンテンツにアクセスします
アプリ内購入が成功した後、ダウンロードしたSKDownload
zipファイルにアクセスしようとしています。
SKDownload
ダウンロードしたファイルを処理する関数は次のとおりです。
を調べると、download.contentURL
そこにあります:
FileManager
ただし、上記のコード行を使用してファイルにアクセスしようとすると、次のようになります。
ファイルが存在しないことを示す次のエラーが表示され続けます。
/
zipファイルをディレクトリとして扱うために最後に追加しようとしましたが、他の多くのことは役に立ちませんでした。そのファイルを含むディレクトリにアクセスしようとしました(zipファイルまで):
エラーは、「キャッシュ」ディレクトリが見つからないことを示しています。
"Contents"
また、ランダムな人が見つけたサンプル コードの 1 つのように、パスに追加しようとしました。
私は 1 日以上頭を悩ませていましたが、この件に関するドキュメントは見つかりませんでした。どんな助けでも大歓迎です、ありがとう!