ラベル iOS の投稿を表示しています。 すべての投稿を表示
ラベル iOS の投稿を表示しています。 すべての投稿を表示

2018年6月11日月曜日

ionic3 で HTTP 通信

基本的なことは下記のページに書かれています。


$ ionic cordova plugin add cordova-plugin-advanced-http
$ npm install --save @ionic-native/http

これで準備は完了。

let url = 'http://hoge.hoge.com/test.php';

let body = {
  'sid': this.data.server.siteID,
  'tac': this.data.terminal.account,
  'tpw': this.data.terminal.password,
};

let headers = {};

this.http.post(url, body, headers).then((res: HTTPResponse) => {
  // 成功
  console.log(res);
  resolve(res);
}).catch((res: any) => {
  // エラーが発生した
  console.log(res);
  resolve(res);
});

利用も簡単!

なんて楽ちんなんだろうと思ったら大間違いでした…

Android ではなんの問題もなく通信できたのですが、iOS では then() にも catch() にも来ません???

XCode のコンソール出力を見ると、cordovaHTTP is not defined と出力されています???
なんでだろうと散々調べたのですがさっぱりわからず。念の為 cordova-plugin-advanced-http をremove 後に、再度 add。
cordovaHTTP is not defined は出なくなり、http.post() 呼び出し後リクエストの送信は行われるのですが、相変わらず then() にも catch() にも来ません><;

先に種明かしすると、この原因は content-type でした。

クライアントからのリクエストもサーバーからのレザルトも単なるテキストなので、plain/text を返していたのですが、application/json を返さないとサーバーからのレザルトを受け取らないようです。

いやはやマイナーOSは情報少ない上に癖が強くてホント苦労させられる><;

ionic3 で iOS 版のアプリタイトルを日本語にする方法

config.xml にて設定してやると *-Info.plist を書き換えられると書かれているページが複数あり、よく見かけるタイプは config-file というタグでした。それを加工して下記みたいにしてみたわけですが、全く効果なし…

<config-file parent="CFBundleDisplayName" platform="ios" target="*-Info.plist">
    <string>アプリ名</string>
</config-file>

何だろうなぁと思っていましたが、動かないものは仕方ないので、トランスパイル後 XCode でコンパイルする前に *-Info.plist を手動で書き換えていました。(操作性最悪の iMac でこれやるのってほんとめんどくさい)

例によって Android では問題なく動くものが iOS で動かない現象に遭遇しまして、あれこれ調べていると下記の edit-config というタグの説明を発見!

お!っと思い下記を試すと大成功でした\(^_^)/

<edit-config file="*-Info.plist" mode="merge" target="CFBundleDisplayName">
    <string>アプリ名</string>
</edit-config>

ちなみに Android では、 ./platforms/android/app/src/main/res/ に values-ja というフォルダーを作り、 ./platforms/android/app/src/main/res/values/string.xml をコピって、書き換えてやれば多言語対応できます。