問題タブ [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.

0 投票する
1 に答える
951 参照

ios - 購入済みコンテンツの SKDownload を取得する方法

ホストされたコンテンツがある場合のアプリ購入フローの標準は次のとおりです。

  • 取引をする
  • トランザクションが「購入済み」状態になったら、SKDownload を取得してダウンロードを開始します。
  • ダウンロードが完了したら、トランザクションを「終了」と宣言できます。
  • これで問題ありません。購入したすべてのコンテンツを復元したいと想像してみてください。これは、アプリを削除して再インストールしたか、単に別のデバイスにインストールしたためです。さて、これは WWDC 2012 セッションでこの件について確認されています。すべての購入を復元すると、復元するコンテンツの完全なリストが表示されますが、おそらくそれらすべてをダウンロードする必要はありません。このような場合、ダウンロードするコンテンツの選択肢をユーザーに提供し、選択した製品の SKDownload をキューに入れる必要があります。ダウンロードが終了し、コンテンツが正常にインストールされたら、トランザクションの終了を宣言できます。セッション ビデオでは、ダウンロードが拒否されたり遅延したりした場合に何をすべきかが語られていませんでした。私の知る限り、SKDownload をどこかに保存して後で取得する方法はなく、iTunes に「この既に購入した製品の SKDownload をください」というようなことを要求する API はありません。したがって、私によると、このケースを回避するには2つのオプションがあります。

  • 購入していないものを再度復元するように依頼します。これはエレガントではありませんが、機能します
  • 手順を開始してから一時停止します。これは後で再開します。ただし、このソリューションにはいくつかの欠点があります。システムが SKDownload を管理する方法を制御できず、一定時間後にキャンセルされる可能性があります。私はこの解決策を試したことはありません。
  • 他の誰かがこの問題に直面し、より良い解決策を見つけましたか? Apple に機能強化のリクエストを開くのは理にかなっていますか?

    0 投票する
    0 に答える
    245 参照

    macos - Mac で SKDownload のトランザクションを見つける方法は?

    iOSではSKDownload

    @property(nonatomic, readonly) SKPaymentTransaction *transaction

    これにより、ホストされているコンテンツがダウンロードされるたびにトランザクションを完了することができます。

    ただし、Mac にSKDownloadはそれがないため、 を参照してSKPaymentQueue、ダウンロードされたトランザクションを探す必要があります。

    そうしている方いますか?

    問題は、時々「finishTransaction」コードに到達しないことですが、それ以外の方法でそのトランザクションを終了する方法が本当にわかりません! iOS では、ダウンロードに関連するトランザクションを完了するだけなので簡単です。

    要約すると、Mac でダウンロードの取引を完了する方法を知っておくとよいでしょう。それは暗黙のうちに起こりますか?

    0 投票する
    0 に答える
    526 参照

    ios - StoreKit SKDownload の進行状況が完了しない

    私は現在、ユーザーが Hosted by Apple によってダウンロード可能なコンテンツを購入できるようにするアプリに取り組んでいます。これまでのところ、ユーザーが購入できるという点で私のコードは機能し、ダウンロードは正常に完了し、ファイルはそのままです。

    ただし、一部のファイルは非常に大きいため、ダウンロードの進行状況をユーザーに表示したいのですが、SKDownload.progress が約 60% または 80% まで実行された後、突然停止することがわかりました。

    私のコードでは、次のことを行っています。

    しかし、ログを確認すると、進行状況が表示されますが、ここで停止します。

    また、進行状況ラベルをユーザーに表示しています。ユーザーの観点から見ると、ダウンロードを見ているときに、最後に表示される数字が 60 または 80% の場合、実際にはダウンロードされていないと思います。

    これに関するヒントはありますか、それともおそらくバグですか?

    ありがとうアーロン

    0 投票する
    0 に答える
    174 参照

    ios - メッセージ拡張子。SKDownload コンテンツを取得します。

    メッセージ拡張機能から SKDownload からコンテンツを取得しようとしましたが、常にアクセス許可エラーが発生します。(xCode 8 b4、iPhone 5、iOS 10 b4) ここに画像の説明を入力

    ここに画像の説明を入力

    0 投票する
    0 に答える
    83 参照

    ios - アプリがバックグラウンドになった後の SKDownload の問題

    私のアプリでは、アプリがアクティブな場合、Apple でホストされているコンテンツのダウンロードはうまくいきます。ただし、バックグラウンドに移行して十分な時間が経過すると、再びアクティブになったときにSKDownloadまだactive状態がありますが、進行状況は報告されていません。取引がまだ完了していないことを確認しました。

    なぜこれが起こるのか誰にも分かりますか?私のデバイスは Wi-Fi に接続されSKDownloadており、インスタンス変数に保存したため、ダウンロードの状態を確認できました。したがって、バックグラウンドでダウンロードの進行状況を受信できないという問題だけであれば、現在の値を から読み取ることができますmyDownload.progress。ただし、進行状況はまったく同じであり、更新されていません。

    上記のようにSKDownload変数に保存するので、これは私にとって大きな問題です。重複したダウンロードが開始されるのを防ぐためにそうしています。私のアセットは 150MB を超えているため、ユーザーはアセットのダウンロードにかかる時間を認識せず、アイテムを再度復元/「購入」して 2 回目のダウンロードを開始しようとする可能性があります。そのため、実行中のダウンロードを変数に保存し、新しいトランザクションが完了すると、ダウンロードが既に実行されているかどうかを確認します。ダウンロードが最短時間で完了することを保証する優れた設計です。唯一の問題は、アプリが長時間バックグラウンドにあり、次の状態になった場合に発生します。

    1. アクティブなレポートをダウンロード
    2. 対応するトランザクションはまだ終了していません
    3. なぜかダウンロードが進まない

    上記のセーフガードを考えると、ダウンロードが実行されておらず、アプリが重複したアクティブなダウンロードを認識しているため、新しいダウンロードが開始されないため、問題は明らかです。

    ダウンロードを再開しようとしましたが、何もしません (状態が一時停止されていないためだと思います)。

    更新 1

    この問題を解決する方法を見つけましたが、私にはハックのように見えます:

    1. アプリがバックグラウンドになったらダウンロードを一時停止する
    2. ストア トランザクション オブザーバーを再度 (!!!) に追加しapplicationWillEnterForegroundます。
    3. 一時停止したダウンロードを再開する

    2が一番面白い。すべてのストア関連の通知を処理するシングルトンがあります。でトランザクション オブザーバーとして追加し、didFinishLaunchingWithOptionsでのみ削除しwillTerminateます。アプリがフォアグラウンド状態になった後、シングルトンが同じであることを確認しました。それでも、ストア オブザーバーとして再度追加しない限り、ダウンロードの再開は見られません。超面白い。

    0 投票する
    0 に答える
    75 参照

    swift - SKPaymentQueueを使用してアプリ内購入を処理した後、SKDownloadのコンテンツにアクセスします

    アプリ内購入が成功した後、ダウンロードしたSKDownloadzipファイルにアクセスしようとしています。

    SKDownloadダウンロードしたファイルを処理する関数は次のとおりです。

    を調べると、download.contentURLそこにあります:

    FileManagerただし、上記のコード行を使用してファイルにアクセスしようとすると、次のようになります。

    ファイルが存在しないことを示す次のエラーが表示され続けます。


    • /zipファイルをディレクトリとして扱うために最後に追加しようとしましたが、他の多くのことは役に立ちませんでした。

    • そのファイルを含むディレクトリにアクセスしようとしました(zipファイルまで):

    エラーは、「キャッシュ」ディレクトリが見つからないことを示しています。

    • "Contents"また、ランダムな人が見つけたサンプル コードの 1 つのように、パスに追加しようとしました。

    私は 1 日以上頭を悩ませていましたが、この件に関するドキュメントは見つかりませんでした。どんな助けでも大歓迎です、ありがとう!