モバイル アプリケーションが Web サーバー (PHP/MySQL *) からデータを取得し、要求を行うようにするにはどうすればよいですか?
Android では、古いバージョンのApache HTTP クライアントが利用可能です。そのため、アプリからサーバーへの HTTP リクエストを作成するために、その側がカバーされます。
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("https://www.myserver.com/webservice/xyz");
HttpResponse response = client.execute(request);
わずか 3 行のコードで、GET 要求を作成できます。
では、PHP と Android プラットフォーム バージョン 8 (2.2 Froyo) でサポートされている Web サービスは何ですか?
SOAP やその他の XML ベースのプロトコルなど、PHP で使用できるさまざまな Web サービス ライブラリがあります。XML は肥大化しているので、個人的にはそうはいきません。モバイル デバイス、制限された帯域幅、および高価なデータ プランを扱っているため、サーバーとクライアントの間で送信されるデータを小さく保ちたいと考えています。JSON は、XML のよりコンパクトな代替手段です。サーバーとクライアント間でデータを交換するための独自の「バイナリ」データ形式を作成することもできます。
Android 側では、選択した Web サービスに適した Java クライアント ライブラリを探すだけです。または、カスタム ソリューションを使用する場合は、自分でコーディングするだけです。
重要な要件が 1 つあります。
HTTPS を使用する
アプリケーションからの認証を要求することにより、つまり、アプリケーションのみがデータにアクセスできるようになります。
ユーザーのログインを扱っていない限り、これを確実に強制することはできません。ユーザーにログインを要求する場合は、OAuth を検討してください。
クライアント アプリにもサーバーにも、プレーン テキストのパスワードを保存しないでください。
アプリだけがその Web サービスにアクセスできるようにするだけの場合は、「クライアント シークレット」文字列などをアプリの HTTP 要求ヘッダーに追加できます。サーバーはその秘密の文字列が存在することを要求します。存在しない場合、アクセスは拒否されます。
ただし、これは、人々がその秘密を理解するためにあなたのアプリを見るのを止めるものではありません. ランダムに文字をごちゃまぜにするなど、その秘密の文字列を難読化することで、少し難しくすることができます。
また、メジャー アップデートごとにクライアント シークレットを定期的に変更することもできます。これには、ユーザーが更新する必要があります。そうしないと、ユーザーはロックアウトされます。