この記事の要点

Shadowrocketのサブスクリプションに関する問題は、リンク、リクエスト、レスポンス内容、リスト表示の4段階に分けて確認します。利用中のサービス提供元とサブスクリプションがあることを前提に、リンクが完全かどうかの確認方法、タイムアウトと解析エラーの見分け方、Settings → Subscribeでの更新方法の確認、既存の設定を残したまま復旧を確かめる手順を説明します。

解析エラーとリストが空の状態を見分ける

サブスクリプションの更新では、まずデータを取得し、その後サーバー項目として解析します。リクエストが完了しない、ログインページが返される、内容が認識されないといった場合、新しい項目を取得できないことがあります。一方、リストが空になる原因には、検索フィルター、折りたたまれたサブスクリプショングループ、サーバーから実際に空の内容が返されているケースもあります。リストの表示だけでは、どの段階で問題が起きたのか判断できません。

リンクを確認 データをリクエスト レスポンスを確認 項目を解析 リストを確認

まずHomeに戻り、検索条件を解除して該当するサブスクリプショングループを展開します。すべての項目がないのか、特定のグループだけ空なのかを確認してください。今回の更新で表示されたメッセージ全文と発生時刻を記録します。以前の項目が残っている場合はそのままにし、「更新に失敗した」ことを「既存の設定も使えなくなった」と判断しないでください。

サブスクリプションURLを確認する:完全なアドレスと認証パラメーター

利用中のサービス提供元のアカウントページから、Shadowrocket用のサブスクリプションURLをコピーし、アプリに保存されているURLと一つずつ照合します。アカウントのトップページ、プラン説明ページ、個別サーバーの共有情報は、サブスクリプションURLとは異なります。コピー時は全文を選択できているか、特に疑問符以降の認証パラメーターが含まれているか確認してください。

https://example.com/sub?token=xxxx

上記はインポートに使えない例示用URLです。https://はプロトコル部分、example.comはドメイン、/subはパス、?token=xxxxはクエリパラメーターを表します。実際のURLのパスやパラメーター名はサービス提供元によって異なるため、この例を参考に書き換えないでください。サブスクリプションURLのtokenはアクセス権限に関わることが多いため、アカウント情報と同様に安全に管理してください。

  1. URLの前後に引用符、空白、改行、チャットアプリが付けた句読点が紛れ込んでいないか確認してください。URL内で有効なエンコード文字は削除しないでください。
  2. ?、&、=などの区切り文字が欠けていないか確認します。ウェブページのソースからテキストをコピーした場合は、パラメーターの区切りが文字列の&として誤って保存されていないかにも注意してください。
  3. 元のtokenの大文字・小文字とエンコード形式を保ち、%2Fを勝手にデコードしたり、プラス記号を置き換えたり、署名付きパラメーターの順序を変更したりしないでください。
  4. サービス提供元がサブスクリプションURLをリセットした場合は、新しいURLをコピーし直してください。見た目が似ていても、古いURLは無効になっている可能性があります。

ブラウザーでURLを開く方法は参考になりますが、それだけで判断しないでください。ブラウザーではログイン済みアカウントのCookieが使われることがあり、アプリからのサブスクリプションリクエストとはログイン状態が異なる場合があります。逆に、ブラウザーに長いエンコード文字列が表示されたり、ファイルの保存が始まったりしても、レスポンスに問題があるとは限りません。確認すべきなのは、そのURLからアプリが対応するサブスクリプションデータを単独で取得できるかどうかです。

レスポンスを確認する:タイムアウト、認証エラー、内容の不一致

ドメインにアクセスできることと、サブスクリプションのエンドポイントが使えることは同じではありません。また、レスポンスを受信できても、有効なサブスクリプションを取得できたとは限りません。アプリのメッセージ、診断記録、サービス提供元からの情報にHTTPステータスコードがある場合は、発生時刻とあわせて記録してください。以下は標準的なHTTPステータスやネットワークエラーの用語です。Shadowrocketで常に同じ文言が表示されるとは限りません。

HTTP 401 Unauthorized

原因:サーバーが現在のリクエストの認証情報を受け付けていません。無効なtokenや認証情報の不足が原因として考えられます。

対処:アカウントページからサブスクリプションURLをコピーし直し、そのURLの認証状態をサービス提供元に確認してください。

HTTP 403 Forbidden

原因:サーバーが現在のリクエストを拒否しています。アカウント権限、アクセス元の制限、アクセス方針などが考えられます。ステータスコードだけでプランの期限切れと判断しないでください。

対処:アカウントの状態を確認し、リクエストの発生時刻とステータスコードをサービス提供元に伝えて、アクセス制限の有無を確認してください。

HTTP 429 Too Many Requests

原因:サーバーがリクエスト頻度を制限しています。更新を連続して試すと、問題の切り分けに時間がかかることがあります。

対処:リクエストの繰り返しを止め、サーバーが示す待機時間またはサービス提供元の案内に従って、時間を置いてから一度だけ更新してください。

Request timed out

原因:待機時間内にリクエストが完了しませんでした。ネットワーク経路またはサブスクリプションサーバーに問題がある可能性があります。

対処:まずWi-Fiとモバイル通信で結果を比較し、Update via Proxyを使う場合は、利用可能なプロキシ接続がすでにあるか確認してください。

レスポンスがアカウントのログインページ、メンテナンス通知、アクセス確認ページの場合、HTTPステータスが200でもサーバーリストとして解析できるとは限りません。サービス提供元に、指定されたURLがShadowrocket対応のサブスクリプション形式を返すこと、操作が必要なウェブページではないことを確認してください。エラーページのテキストをサーバー設定として手入力しないでください。

結論:まず受信内容を確認し、その後に解析関連の設定を見直す

返された内容がサブスクリプションデータでない場合、同じURLを何度インポートしても解決しません。まず利用中のサービス提供元にレスポンス内容と利用権限を確認し、その後一度だけ更新してください。

Settings → Subscribeと更新経路を確認する

Settings → Subscribeでサブスクリプションの更新設定を確認します。特にUpdate via Proxyを確認してください。この設定は更新リクエストの経路を切り替えるもので、URLの問題を修正したり、非対応のレスポンスを有効なサブスクリプションに変換したりするものではありません。問題を切り分ける際は、一度に変更する条件を一つだけにして、更新結果を記録してください。

2段階
設定画面:Settings → Subscribe
2つの経路
更新リクエストを比較する:直接接続とUpdate via Proxy
1項目
1回につき条件を一つだけ変更して手動更新
  1. まず現在の設定のまま一度更新する:Homeでサブスクリプションを更新します。たとえば下に引いて更新し、エラーメッセージが表示されるか確認してください。リクエストを連続して実行しないでください。
  2. 直接接続でタイムアウトする場合はプロキシ経由を検討する:利用可能なサーバーがすでにある場合は、先に選択して接続します。次にSettings → SubscribeでUpdate via Proxyを確認して有効にし、再度更新してください。
  3. プロキシが実際に使えるか確認する:HomeのConnectivity Testを使って状態を確認します。テスト結果が示すのは、そのテスト条件での接続状況です。サブスクリプションのエンドポイントに必ずアクセスできるとは限りません。
  4. プロキシ経由で失敗する場合は反対の条件で比較する:現在のネットワークからサブスクリプションのエンドポイントに直接アクセスできる場合は、Update via Proxyをオフにして再度試してください。DNS、Global Routing、サブスクリプションURLを同時に変更しないでください。

リストが空で利用可能な既存サーバーもない場合、Update via Proxyを有効にするだけでは接続できません。まず直接接続の経路を確認するか、サブスクリプションのエンドポイントにアクセスする条件を利用中のサービス提供元に問い合わせてください。サブスクリプションの取得とサーバーへの接続は別の段階です。後者に必要な設定をまだ取得していない状態で、スイッチ一つで前者を省略することはできません。

更新するタイミングを選び、以前の結果を新たな問題と混同しない

サービス提供元がアカウント権限を復旧した、tokenをリセットした、またはサブスクリプション内容を変更した場合は、変更が反映されたことを確認してから手動で更新してください。すべてのサブスクリプションに同じ更新間隔があると決めつけず、アプリを前面に表示したまま待つことを更新完了と見なさないでください。自動更新の動作は、Settings → Subscribeに現在設定されている内容を確認してください。

更新のタイミングと確認方法
現在の状況まず行うこと次に確認すること
アカウントの権限が復旧した直後サービス提供元のアカウントページで権限が反映されたことを確認する手動更新後に想定した項目が表示されるか
サブスクリプションURLをリセットした直後アプリに保存されているURLを新しいURLに置き換える古いtokenに対応するURLへリクエストしていないか
Wi-Fiからモバイル通信に切り替えた直後現在のネットワーク接続が安定するまで待つ同じURLが新しいネットワークでもタイムアウトするか
HTTP 429を受信した連続更新を止め、表示された案内に従って待つ次のリクエストも制限されるか
サービス提供元からサブスクリプション内容の変更を確認した手動更新を一度実行する該当グループの項目やパラメーターが変更内容に沿って反映されているか

更新に失敗しても以前の項目が表示されたままの場合があります。そのため、「リストにサーバーが残っている」ことは、直前の更新が成功した証拠にはなりません。同様に、項目名が変わっていないことも、更新されていない証拠にはなりません。サーバー側では接続パラメーターだけが変更されている可能性があります。更新メッセージ、実際の項目、サービス提供元が確認した変更内容をあわせて判断し、名前だけで決めないでください。

よくある質問と問い合わせ時に伝える情報

同じURLをブラウザーで開けるのに、アプリでは解析できないのはなぜですか?

まずブラウザーに何が表示されているか確認してください。ログインページやアカウント画面が表示されても、サブスクリプションデータを取得できた証明にはなりません。サブスクリプションのテキストが表示されていても、その形式がShadowrocketに対応しているか、利用中のサービス提供元に確認してください。ブラウザーで表示されたページ全体をサーバー欄に貼り付けないでください。

Update via Proxyを有効にしたら更新できなくなりました。どうすればよいですか?

まず選択中の既存サーバーで接続できることを確認し、HomeでConnectivity Testを実行してください。プロキシ経由で接続できず、サブスクリプションのエンドポイントには直接アクセスできる場合は、Settings → SubscribeでUpdate via Proxyをオフにして一度だけ更新し、2回の結果の違いを記録してください。

リストが空の場合、まずアプリを削除して再インストールすべきですか?

まずHomeの検索条件を解除してグループを展開し、サブスクリプションURLとサービス提供元のアカウント状態を確認してください。再インストールすると既存の設定を復元する手間が増えるうえ、サーバーから返される内容は変わりません。失敗前後を比較するには、古い設定を残しておく方が役立ちます。

サブスクリプションの更新に成功したのに、Connectivity Testがタイムアウトするのはなぜですか?

サブスクリプションの取得に成功したということは、設定を取得して解析できたという意味であり、すべてのサーバーに接続できるという意味ではありません。Homeで想定したサーバーが選択されていることを確認し、アドレス、ポート、プロトコルに必要なパラメーターを利用中のサービス提供元に問い合わせてください。接続テストに失敗しても、サブスクリプションのtokenを勝手に書き換えないでください。

サービス提供元に詳しい調査を依頼する場合は、問題の特定に必要な情報を伝えながら、サブスクリプションの認証情報を保護してください。公開の場には、サブスクリプションURL全文、QRコード、tokenが写ったスクリーンショットを投稿しないでください。URL全文が本当に必要な場合は、利用中のサービス提供元が指定する非公開のサポート窓口からのみ送信してください。

ここまで確認すれば、次に取るべき対応を絞り込めます。URLに誤りがあれば修正し、権限の問題はサービス提供元に確認し、ネットワークのタイムアウトは更新経路を調べ、形式の問題はレスポンス内容を確認してください。原因が分からないまま複数の設定を同時に変更すると、成功しても失敗しても理由を特定できなくなります。