2025年7月31日木曜日

iOS で ajax が動かない

$.ajaxで undefined なエラー?

iOS 用のアプリ(WEBアプリ)で、ログイン後にデバイストークンを登録しようとして、以下のような構成にしてました
login.js - IDやパスワードを調べてログインするまでをクラス化したもの
device_toiken.js - デバイストークンをDBに登録するためのクラス
ここで、デバイストークンの登録が必要なのはデバイスがスマホアプリの時だけです。
サービスはスマホに PUSH 通知するけど、WEB PUSH は使わないんで。
なので、login.js と device_token.js は、独立してて相互通信をする必要はないのよね。

カスタムイベントを用意する

そこで、login.js はログインが成功したら、独自に作ったカスタムイベントを発行するんです。
こんな感じ。

    // ログイン完了イベントを発行する
    window.dispatchEvent(new CustomEvent(LOGIN_EVENT_NAME, {
        detail: {
            login_id: login_id,
            device_type: device_type
        }
    }));

受け取り側の device_token.js では、イベントを待機したらデバイストークンを取得してサーバに登録します。
こんな感じです。

    // ログイン完了イベントでデバイストークンを取得して登録。
    window.addEventListener(LOGIN_EVENT_NAME, async (event) => {
        const login_id = event.detail.login_id;
        const device_type = event.detail.device_type;
        await registerDevice(login_id, device_type);
    });
データベースへの登録処理は $.ajax()なり $.post()なりでサーバのAPIを呼び出すだけです。
で、Android アプリは正しく動作するのに、iOS アプリだとエラーの不明な例外で落ちます。
login.is では、イベント発効前に $.ajax で ID が正しいかとかパスワードが正しいかとかやってるのに。
iOS だとデバイストークンの保存APIだけが落ちるんですよね・・・
丸一日追いかけましたよ・・・

ようやく

という書き出しから想像つくと思うけど。
要するにね、カスタムイベントハンドラ内での $.ajax だから落ちるんだと分かった。

login.jsでdevice_token.jsのクラスを依存させて次のように書き換えました。

    if(this.IsMobile) {
        const tokener = new DeviceTokenClass();
        var device_token = await tokener.getDeviceToken();
        if(device_token != null) {
            var result = await tokener.registDeviceToken(login_id, device_type, device_token);
        }
    }

まとめ

せっかく2つのクラスを分離してたけど、それができなくて残念でしたが。
Androidは動くけど、iOS では動かない!
なぜじゃ!?
という事態になったら、こういった部分が引っかかってるかもです。
納期ギリギリまにあったので、よし!w

めでたしめでたし。

2025年7月30日水曜日

Android Studio で Emulator が動かない

エミュレータが動作しない

開発PCが壊れたので新しく Windows11 Pro の環境でプロジェクト再構築。
Android Studio を使ってアプリ開発しようとしたら、エミュレータが動かない。
Pixel 9 terminated.とかいうエラーダイアログが出て動作しません。

Android Studio は新しいバージョンになってるんだが・・・

Windows のユーザー名

新しいPCはマイクロソフトアカウントでユーザー名が日本語なんですよ。
どうやら、こいつが原因のようです。

ところが。Windows11のユーザー名は変更できない!
(できるのかもしれないけど、無理だった)

Android のディレクトリを変更する

・環境変数 ANDROID_SDK_HOME を設定
 コントロールパネル「システム」「システムの詳細設定」「環境変数」を開いて新しい環境変数を作成します。
D:\Programs\Android\.android を作ってそこを指定してみました。
・ユーザープロファイルフォルダの .android を丸ごとコピーします。
ユーザプロファイルは C:\ユーザー\ユーザー名 のフォルダね。
・念のため、ユーザープロファイルの .android フォルダの名前を .android_bak にしました。
・Android Studio を起動。
・エミュレータ起動。

まとめ


無事、エミュレータが動作しました。
Android Studioの関係者が見てたら、修正してほしいですねw

めでたしめでたし。

2025年4月11日金曜日

WindowsUpdateでフォントがおかしくなった!

Windows10 Update

使ってるPCはWindows11にアップデートできない機種なので Windows 10 を使い続けてます。
昨夜、「更新してシャットダウン」を選んで朝まで放置してたら、例によってPCは起動状態でした。
まあ、いつものことだから、イラつきもしませんが(笑)

エクスプローラの表示がおかしい

さて、今日も作業を・・・とみるとエクスプローラの表示がおかしい。
おいおい、なんだよこりゃ?
システムフォントが変わったのかな?

フォントを変更する

たしか、Windows はフォントの大きさを変えられるけどフォント自体を変更することはできなかった気がする。
そこで、これ!
「Meiryo UIも大っきらい!!」
ダウンロードして展開したら実行ファイルをクリック。
フォントを指定して、「一括設定して終了」これでOK
文字化けさえしなければなんでもいいので、「Meiryo UI」を指定しました。(笑)

まとめ

と、いうことで、昨日までとちょっと違うけど、文字化けを対策できました。
有用なソフトウェアを公開してくれている Tatsu さんに感謝です!
ありがとうございます!