PubliraGitHub

このページはmainの開発版について説明しています。まだリリースされていない変更を含むことがあります。最新のリリースについてはv0.5のドキュメントを参照してください。

オフライン閲覧

公開

アプリは、読者が開いたエピソードをネットワークがなくても読み直せるように保存します。また、読者はエピソード全体を前もって保存することもできます。この機能について、テナント管理画面やマニフェストで設定するものはなく、どのテナントのアプリも同じように動作します。このページは、この仕組みがコンテンツの保護について自社の求める水準を満たしているかを判断する出版社のスタッフと、保存したエピソードが開かなくなった理由を読者から尋ねられたスタッフに向けたものです。それぞれの仕組みがストアの審査にどう関わるかは、最後にまとめています。

読者が保存できるもの

エピソードが端末に保存される方法は2つあります。

  • 読むこと。 アプリで開いたエピソードは、読者がめくったページとともにすべて保存されます。途中まで読んだエピソードなら、読んだところまでのページが保存されます。作品一覧の最初のページと、読者が開いたシリーズの画面もすべて保存されます。
  • オフライン用に保存を選ぶこと。 シリーズの画面にあるエピソードの行でこのボタンを選ぶと、すべてのページを一度に取得します。途中まで読んだエピソードでは、まだ保存されていないページだけを取得します。保存後、行には保存済みと表示されます。

保存のボタンが表示されるのは、読者が今すぐ開けるエピソードです。つまり、無料のエピソードか、読者のアカウントで開けるエピソードです。アカウントで開ける理由は、購入、レンタル、プラン、チケットのどれでもかまいません。有料のエピソードが保存されるのはログインしている読者の場合だけなので、ログインしていない読者が保存できるのは無料のエピソードだけです。

本棚 › ダウンロードには、端末に保存されているものがシリーズごとに表示されます。表示されるのは、上限に対して使っている容量、各エピソードを保存した日時、オフラインで開ける期限(期限がある場合)、保存されているページ数(一部のページだけが保存されている場合)です。削除を選ぶとそのエピソードを削除し、すべて削除を選ぶと、別のアカウントでログインしていたときに保存したものも含めて、端末に保存されているすべてのエピソードを削除します。

ネットワークがないときは、保存したもの、つまり作品一覧の最初のページ、シリーズの画面、保存したエピソードを開けます。検索、ランキング、おすすめなど、作品全体を対象に読み込むものにはネットワークが必要です。

開けるかどうかは、端末ではなくPubliraのサーバーが判断します。アプリはエピソードを開くたびにまずサーバーに問い合わせ、サーバーに接続できない場合にだけ保存したコピーを読みます。サーバーから応答があれば、保存したコピーはその内容で置き換えられます。エピソードがロックされている、非公開になった、または削除されたという応答があれば、そのエピソードはページとともに端末から削除されます。公開されなくなったシリーズでは、その下に保存されたエピソードもすべて削除されます。

保存場所と保護の方法

保存したエピソードは、アプリ専用の領域に保存されます。ほかのアプリからは読めず、アプリを削除すると一緒に削除されます。すべてのページと、保存しているものの索引は、ランダムな鍵で暗号化されます。この鍵は、アプリが最初に必要としたときに作成し、読者のセッションと並べてプラットフォームの認証情報ストアに保管します。認証情報ストアは、iOSではKeychain、AndroidではKeystoreです。ページは読者に表示された画像のまま、この鍵でさらに暗号化して保存されます。読者のセッションも、ページの配信元のアドレスも記録しません。

認証情報ストアのない端末では何も保存されず、オンラインでしか読めません。鍵を読み取れなくなった場合、アプリは新しい鍵を作成し、古い鍵で保存したエピソードは削除されます。読者はエピソードを保存し直す必要があります。

この暗号化は、鍵を持たない人がアプリのファイルを端末からコピーしても、保存したページを読めないようにするためのものです。DRMではありません。エピソードを開く権利のある読者は、そのエピソードを開く鍵も持っています。端末を自由に操作できる人がそこからページを取り出すことをアプリは防げず、これはどのアプリにもできません。

有料のエピソードはオフラインで7日間

保存した有料のエピソードは、アプリが最後にオンラインで開いてから7日間、オフラインで開けます。もう一度オンラインで開くと、7日間を最初から数え直します。オフラインで読んでも数え直しにはなりません。7日を過ぎてからオフラインで開くと、「保存したエピソードの閲覧期限が切れました。通信できる状態で開き直してください。」と表示され、エピソードは端末から削除されます。

7日間という期間は、確認できない閲覧の権利を端末がどれだけの間信頼するかを表しています。オフラインのアプリには、購入の返金、レンタルや購入の閲覧期間の終了、プランの失効、チケットの取り消しがわかりません。7日より早く有料のエピソードを閉じるのは、権利がいつ終わるかを知らされている場合だけです。

  • 待てば無料のチケットで開いたエピソードは、チケットの期限が来ると閉じます。
  • 無料公開期間の間すべての人に公開されているエピソードは、期間が終わるとすべての読者に対して閉じます。

それ以外の有料のエピソード(購入、レンタル、プラン、スタッフが発行したアクセスチケットで開いたもの)は、権利がそれより早く終わっていても、7日間が過ぎるまではオフラインで開けます。そのため、返金した場合、保存したエピソードが閉じるのはアプリが最後にオンラインで開いてから7日以内です。次にアプリがオンラインで開いたときに、エピソードはロックされて端末から削除されます。

有料のエピソードは、保存したアカウントでしか開けません。ログアウトすると開けなくなり、同じ端末で別のアカウントがログインした場合も開けなくなります。保存したアカウントでログインし直せば、7日間のうちであれば再び開けます。

7日間は端末の時計で数えますが、この時計は読者が変更できます。ただし、時計がまだ達していない時刻に確認された保存は受け付けないので、時計を進めてから戻しても期間は延びません。時計を戻したままにしておくと、エピソードは開き続けます。アプリには、読者が変更できない時刻の情報源がないためです。

無料のエピソードには所有者も7日間の期限もありません。削除されるか、上限を超えて取り除かれるか、次にアプリがオンラインで開いたときにロックされているか削除されているとわかるまで、端末を持っている人なら誰でも開けます。

512MBの上限

保存したページが使う容量は、1台の端末につき最大512MBです。この上限はアプリで決まっていて、テナントも読者も変更できません。あるページを保存して上限を超えると、アプリはまず、保存したどのエピソードにも必要なくなったページを削除します。それでも収まらなければ、アプリが最後にオンラインで開いた日時が最も古いエピソードから順に、エピソードごと削除していきます。読者には通知されません。エピソードはダウンロードから消え、その行には再びオフライン用に保存が表示されます。そのエピソードで読んだ内容は、次のセクションで説明するとおり保持されます。

スマートフォン自体の空き容量がなくて保存できない場合は、「「第1話」をこの端末に保存できませんでした。空き容量を確保してもう一度お試しください。」のように、エピソード名を入れたメッセージが表示されます。

オフラインで読んだ進み具合

ログインしている読者がエピソードのどこまで読んだかと、読み終えたエピソードは、端末に記録されてPubliraのサーバーに送られます。サーバーに接続できない場合は端末で送信を待ち、アプリの起動時、アプリがフォアグラウンドに戻ったとき、読者がログインしたとき、サーバーがリクエストに応答したときに送信します。送信を待つのは各エピソードの最新の位置だけで、読了は一度記録されると取り消されません。

  • 送信を待っている記録は、記録した読者がログインしている間しか送られません。そのため、同じ端末で別のアカウントがログインしても、その人の記録として扱われることはありません。ログアウトすると、その読者の未送信の記録は削除されます。
  • ダウンロードを削除しても、上限を超えて削除されても、そのエピソードで読んだ内容は保持され、読了と位置は送信されます。
  • オフラインでは、エピソードは端末に記録された位置で開きます。オンラインではサーバーの位置が優先されるので、サイトで読んだ位置からアプリで続きを読めます。ただし、送信を待っている位置がある場合は、そちらが優先されます。
  • ログインしていない読者の進み具合は、オンラインでもオフラインでも、どこにも記録されません。

スクリーンショットを撮ったときの通知

エピソードのページが表示されている間に読者がスクリーンショットを撮ると、アプリはページの上に通知を表示します。文面は「このページの権利はテナントの名前に帰属します。個人で楽しむ範囲でご利用ください。」です。読者は閉じるで通知を閉じます。通知は、次にアプリを起動するまでの間、エピソードごとに1回だけ表示されます。

アプリが行うのは通知の表示だけです。スクリーンショットは通常どおり撮影され、読者は通知が出ている状態でもページをめくれます。スクリーンショットについての情報がPubliraのサーバーに送られることもありません。iOSでは、アプリが対応しているすべてのバージョンでスクリーンショットを検知できますが、AndroidではAndroid 14以降に限られます。そのため、それより古いAndroidの端末では通知は表示されません。画面の録画は検知しません。

ストアの審査での扱い

  • App PrivacyとData safety。 保存したエピソードと端末に記録された位置は端末の外に出ないので、どちらのストアの定義でも、アプリが収集するデータには当たりません。ネットワークに再び接続したときに送る進み具合は、アプリが収集するデータにすでに挙げている読書の記録を、あとから送るものです。スクリーンショットについての情報は端末の外に出ません。
  • 暗号化。 App Store Connectでは、アプリが暗号化を使っているかを尋ねられます。このアプリは暗号化を使っています。Publiraのサーバーとの通信のHTTPSと、前述の保存したエピソードの暗号化です。アプリのInfo.plistではこの質問にあらかじめ回答していないため、ビルドをアップロードするたびにApp Store Connectで尋ねられます。回答と、回答によって必要になる輸出関連の届出は、出版社が行います。
  • スクリーンショットの権限。 Android 14以降では、通知の表示にDETECT_SCREEN_CAPTURE権限を使います。この権限は、読者に確認することなく、インストール時にAndroidが付与します。iOSでは権限は必要ありません。