私のプライベートなDiscourseサーバーは動作しており、ブラウザとiOSモバイルアプリからはアクセスできます。
しかし、AndroidではDiscourse Hubがサーバーを見つけることができません。(meta.discourse.orgのような他のサーバーは見つけられます。)
なぜこれが失敗するのか、何か考えはありますか?Androidモバイルアプリは、iOSバージョンとは異なるクローラーエージェントを使用してサーバーにアクセスしているのでしょうか?それとも何か他の理由があるのでしょうか?
pmusaraj
(Penar Musaraj)
2
はい、モバイルアプリは、そのURLがDiscourseサーバーであることを確認するために、いくつかの特定の要求を行います。
2つの要求があります。
serverdomain.com/user-api-key/new への HEAD 要求
serverdomain.com/site/basic-info.json への GET 要求
どちらか一方からデータが返されない場合、アプリはそのURLがDiscourseサイトではないと見なします。
「いいね!」 1
最も参考になりました、@pmusaraj さん!ありがとうございます。フォローアップとして:
1- GETリクエストは応答を受け取りますが、HEADステートメントは「値が無効です」というエラーを発生させます。(これはmeta.discourse.orgでも同様ですが、両方のモバイルアプリはこのインスタンスに接続できます。)サーバーがHEADリクエストに対して適切な応答を生成するようにするには、どうすればよいですか?
2- なぜiOSバージョンはこのテストを正常に通過し、私のサーバーに接続できるのですか?
「いいね!」 1
pmusaraj
(Penar Musaraj)
4
ああ、これはDiscourse側は問題ない可能性が高いことを示しています。サイトの検証はiOSとAndroidで同じです。
以前にも同様の事例がありましたが、AndroidのバージョンやデバイスによってはSSL証明書に対してより厳格なものがあることを覚えています。その時のスレッドはこちらです:Community not found in App Android Version 7 - #37 by h.vdheurik
「いいね!」 1
参考までにお伝えしますが、友人に試してもらったところ、同じ結果になったとのことです。私のデバイスは最新バージョンのGrapheneOSを搭載したPixel 8aです。
これは、2017年のものと同様の、新しい暗号(cypher)の非互換性によるものでしょうか?
pmusaraj
(Penar Musaraj)
6
わかりません。もしサイトのURLをプライベートで送っていただければ、もう少し詳しくデバッグできます。
クローラーを確認しました。私のサーバーは多くのクローラーをブロックしており、そのうちの1つがモバイルアプリの接続を妨げていたようです。工場出荷時の設定にリセットした後、アプリは接続できるようになりました。
その後、okhttpのみを許可されたクローラーとして追加しましたが、モバイルアプリは引き続き接続できました。危機は回避されました。
Androidアプリのコードを確認し、この解決策に取り組んでくれた@pmusarajに感謝します。
「いいね!」 2