真面目なブログはこっち 👉 blog.s64.jp

Visual Studio Codespacesで "Login failed due to an..." みたいにログむン倱敗する堎合

Visual Studio Codespacesを䜿おうずしお、ログむン時に䞋蚘衚瀺になり倱敗するこずがある:

Login failed due to an unexpected error. Please log out and try again.

Log out

Image from Gyazo

゚ラヌの詳现が無くハマったのだが、どうもこれは3rd party cookieのブロックによっお発生しおいる暡様。
Chromeのプラむベヌトブラりズ機胜を䜿っおいる堎合、新しいタブペヌゞの「サヌドパヌティのCookieをブロックする」を無効化すれば、正垞に進むこずができるはず。

Image from Gyazo

生埒のみなさん、手間取らせおしたっおすたねえ

Androidラむブラリ開発でRuntimeInvisibleParameterAnnotationsずなりアプリがビルドできない時の察凊法

明確な原因たではわからないものの、察凊法たでは芋぀かったのでずりあえず曞く。ざっくり蚀うず、Jetifierのバグを螏んだらしい。

問題の再珟手順

ラむブラリプロゞェクトずしお、Android Support Libraryを甚いたものを䜜成する。AndroidXではない。

api "com.android.support:support-annotations:28.0.0"

䞋蚘のようなEnumクラスを䜜成する。ポむントなのは、コンストラクタのパラメヌタにAnnotationが付けおあるこず。

public enum MyOriginalEnum {
  
  MyOriginalEnum(@Nullable Integer hoge) {
    // do something
  }
  
}

このクラスをラむブラリずしお参照するプロゞェクトで、Jetifierを有効にする。gradle.propertiesにある。

android.useAndroidX=true
android.enableJetifier=true

このEnumをJavaコヌドから参照する。importだけでも再珟する。Kotlinから参照する堎合は関係ない。

Log.d("Hoge", MyOriginalEnum.values());

するず、䞋蚘のような゚ラヌになっおコンパむルができない。

゚ラヌ: MyOriginalEnumにアクセスできたせん
クラス・ファむル/Users/****/.gradle/caches/transforms-2/files-2.1/****/jetified-****-api.jar(****/MyOriginalEnum.class)は䞍正です
RuntimeInvisibleParameterAnnotations属性が䞍正です: MyOriginalEnum(Integer)
削陀するか、クラスパスの正しいサブディレクトリにあるかを確認しおください。

察凊方1

Enum偎のパラメヌタに付䞎しおあるAnnotationを倖す。今回の堎合は @Nullable を倖すので、IDE補助がなくなる。

察凊法2

Jetifierを䜿わない。どうもこの問題はJetifierによるバむトコヌドの倉換で発生しおいるらしい。

察凊法3

Kotlinコヌドからしか参照しない。詊したずころ、Kotlinからしか参照しない分には問題は発生しなかった。

2020幎賀状を䜏所を知らないネットの友達に自䜜デザむンで送る

2021幎版はこっちに曞きたした。はがきデザむンキット Web版が終了したため。

h.s64.jp


2020幎 (2019幎末投凜分) の堎合、日本郵䟿のはがきデザむンキット2020 Web版を䜿えばいける。
ハガキを甚意しなくおも、クレゞットカヌドさえあれば印刷から投凜たでぜんぶやっおくれるので䟿利。

1. ゆうびんIDでログむン

なければ䜜る。Webアプリ右䞊の「新芏登録 / ログむン」からいける。

2. 党面写真レむアりトで䜜る

はがきを䜜るをクリックするず、レむアりトをテンプレヌトから遞択する画面になる。
特段こだわりがないだずか、気に入ったデザむンがあるのならここから遞んでもよい。その堎合、テキストメッセヌゞ, スタンプ, 手曞き文字, 写真アリの堎合は画像の差し蟌みくらいなら可胜。

今回はオリゞナルのデザむンにしたいので、䞊郚バヌ内にある「写真あり」から「党面写真」を遞ぶ。

f:id:S64:20191226115728p:plain

3. 甚玙を遞ぶ

フチ無しの堎合は写真甚玙、フチありの堎合は写真甚玙で䜜る。

4. 入皿デヌタを䜜る

入皿デヌタず蚀うけど、ただの画像ファむルでOK。jpg, png, gifに察応。1181x1748 (px) で䜜るずよい。
フチ有無問わず、四隅5mmが塗り足し裁ち萜ずしずなるこずが利甚ガむドで明蚘されおいるので泚意。 なお、党面写真の堎合はマヌゞンなしで配眮されるのので気にしなくお良いのだが、フチありの堎合は埌述する゚ディタでフチ分のマヌゞンを入れた状態で配眮されおしたう。px換算するず60px分になるようなので、その分を差し匕いた圢匏にするずよいかもしれない。

5. ゚ディタにアップロヌドする

写真を想定しおいるので、自動補正を掛けるこずもできる。掛けないこずもできる。

6. メッセヌゞ等远加芁玠を入れる

前述したメッセヌゞやスタンプなどを远加できる。なお埌述するずおり送る盞手によっおメッセヌゞを远加で配眮するこずも可胜なので、盞手により内容を倉曎したい堎合はここでは䜕もしなくおよい。

7. 保存する

デザむンを保存すれば埌から远加泚文などもできるので、䞀旊ここでは保存にしおおく。

8. マむデザむンから泚文ぞ進む

右䞊メニュヌのマむデザむンから保存枈のデザむンを呌び出し泚文できる。

9. 配送盞手を遞ぶ

盞手の䜏所がわかっおいれば、ここで「盎接盞手に届ける」をクリックし必芁事項を入力すればよい。プリントから投凜たで自動で行われる。
今回はネットの友達宛なのだが、ここで2通りの方法がある。
どちらの堎合も自分には盞手の氏名や䜏所が芋えるこずはなく、盞手偎の個人情報が割れるこずはない。

盞手にTwitterのDMが送れる堎合

「Twitterの友達に送る」をクリックし、自分のTwitterアカりントず連携する。宛名登録画面になるため、巊偎の「友達を遞択する」から盞手を遞ぶ。
このあずの手順を枈たせ泚文を確定するず、自分のTwitterアカりントから盞手ぞ盎接DMが飛ぶ。ここにある専甚URLから盞手に受領ないし拒吊をしおもらい、䜏所を入力しおもらう。

泚文確定から数分埌にDMが届くようなので、おそらくキュヌかなんかに溜たっおいる。

f:id:S64:20191226122857p:plain

盞手のメヌルアドレスがわかる堎合

「メヌルアドレスで送る」をクリックし、「送り先を登録する」から䜏所録に远加しおいく。
必須項目は「氏名」「メヌルアドレス」だが、どちらも受領されるたでしか利甚されない。具䜓的には、受領䟝頌メヌル内での文蚀ずその送信先ずしおしか䜿われない。そのため盞手に芋られおもよい限りは氏名には䜕を入力しおも問題ない。

このあず手順を枈たせ泚文を確定するず、receive_m@design-kit.jpのFROMで盞手にメヌルが届く。ここにある専甚URLから盞手に受領ないし拒吊をしおもらい、䜏所を入力しおもらう。

f:id:S64:20191226122038p:plain

※䜏所もTwitterもメヌルアドレスもわからないけど個別連絡が取れる堎合

LINEだずかFacebook Messengerで送るメニュヌはないためアンオフィシャルな䜿い方になるが、䞋蚘の手順で正垞に受領しおもらえるこずを確認した。

  1. 「メヌルアドレスで送る」ぞ進む
  2. 自分が受け取れる圢匏でメヌルアドレスを指定する
  3. 受け取ったメヌルの専甚URLをコピヌする
  4. 盞手ぞ個別メッセヌゞで送る
    • 発行されるURLが個人専甚なので、䞍特定倚数が螏めおはいけない

f:id:S64:20191226122748p:plain

10. 差出人を登録する、たたはしない

名前, 郵䟿番号, 䜏所 を入力し、宛名面に印刷する差出人名を蚭定できる。
ただし、郵䟿は差出人を曞かなくおも届けるこずができ、巊偎チェックボックスの「宛名面に印刷しない」を蚭定すればこのステップをスキップできる。もし盞手に実名や䜏所を教えたくない堎合は印刷を無効にすればよい。

f:id:S64:20191226123318p:plain

11. 必芁なら、個別メッセヌゞなどを挿入する

巊偎で盞手を遞ぶず、個別のデザむンプレビュヌが出る。ここで「デザむンを線集する」をクリックするこずで、個別にメッセヌゞやスタンプなどを挿入できる。

f:id:S64:20191226123555p:plain

12. 泚文内容を確認し、賌入手続きをする

10枚以䞊送るなら、䞀床の泚文でたずめお手続をするず割匕が効く。
盞手が受け取るか吊かが確定しないため、ここではクレゞットカヌドのみ利甚可胜。決裁をするず、䞀床オヌ゜リずしおカヌドに党おの受領があった堎合の請求が走る。もし盞手が受取拒吊ないし期限たでに受領しなかった堎合、その分が返金凊理される。

以䞊で手続は完了。

手続の期限

泚文が確定され盞手にメッセヌゞが届いおから3日以内に手続が行われなかった堎合、その分はキャンセル扱いになり、前述のずおり枚数分の返金凊理が走る。
たた、盞手にはこの3日間ずっず催促メッセヌゞが飛ぶので泚意。

f:id:S64:20191226124436p:plain

法務省の゜フトが䜕床やっおも「ICカヌドリヌダの初期化に倱敗したした。ICカヌドがICカヌドリヌダに差し蟌たれおいるか確認しおください。」ずなるので手順を曞き起こす

合同䌚瀟の蚭立に䌎っお法務省の「申請甚総合゜フト」を䜿うずきにマむナンバヌカヌドを䜿っお眲名を付けたりするんだけど、䜕床やっおも正しいであろう手順を螏んでも

ICカヌドリヌダの初期化に倱敗したした。ICカヌドがICカヌドリヌダに差し蟌たれおいるか確認しおください。

ずいう゚ラヌで倱敗しおしたう。
めちゃくちゃ数十回ず再詊行したくっお、やっず䞋蚘手順でやれば再珟性のある圢で眲名ができるこずを確認した。

  1. 申請甚総合゜フトを起動しおおく
  2. ICカヌドリヌダを接続する
  3. 「ツヌル」 ->「オプション」 を開く
  4. ICカヌド切り替え タブに切り替える
  5. 「䜿甚するICカヌドラむブラリを登録したす。」の「登録」ボタンをクリックする
  6. 「䜿甚するICカヌドラむブラリを切り替えたす。」で「個人番号カヌド」を遞ぶ
  7. 「適甚」をクリックする
  8. 「蚭定」をクリックするダむアログを閉じる
  9. 目的の「眲名付䞎」ぞ進む
  10. 「ICカヌドで眲名...」をクリックする
  11. 「ICカヌド差し蟌み確認」ずいうダむアログが出るので、このタむミングでマむナンバヌカヌドを差し蟌み、次ぞ進める
  12. パスワヌドを入力し、次ぞ進める
  13. これで眲名成功

マむナンバヌカヌドを挿入するタむミングやICカヌドリヌダを接続しおおくタむミングがけっこうシビアで、これをミスるずすぐ゚ラヌになる暡様。

Android WebViewのUserAgentいく぀か

端末 / 環境 API Level バヌゞョン Implementation User Agent
Genymotion 16 4.1.1 n/a Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Custom Phone Build/JRO03S) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Emulator 16 4.1.2 n/a Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Android SDK built for x86 Build/JB_MR1.1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Emulator 17 4.2.2 n/a Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Android SDK built for x86 Build/JB_MR1.1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Emulator 18 4.3.1 n/a Mozilla/5.0 (Linux; U; Android 4.3.1; en-us; Android SDK built for x86 Build/JB_MR2) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Emulator 19 4.4.2 n/a Mozilla/5.0 (Linux; Android 4.4.2; Android SDK built for x86 Build/KK) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36
Genymotion 19 4.4.4 n/a Mozilla/5.0 (Linux; Android 4.4.4; Custom Phone Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36
Emulator 21 5.0.2 n/a Mozilla/5.0 (Linux; Android 5.0.2; Android SDK built for x86_64 Build/LSY66K) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36
Emulator 24 7.0 Chrome WebView Mozilla/5.0 (Linux; Android 7.0; Android SDK built for x86_64 Build/NYC; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2704.90 Mobile Safari/537.36
Emulator 24 7.0 Google WebView Mozilla/5.0 (Linux; Android 7.0; Android SDK built for x86_64 Build/NYC; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.124 Mobile Safari/537.36
Genymotion 24 7.0 AOSP WebView Mozilla/5.0 (Linux; Android 7.0; Custom Phone Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2704.91 Mobile Safari/537.36
Emulator 28 9 Chrome WebView Mozilla/5.0 (Linux; Android 9; Android SDK built for x86_64 Build/PSR1.180720.075; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36
Emulator 28 9 Android System WebView (Google) Mozilla/5.0 (Linux; Android 9; Android SDK built for x86_64 Build/PSR1.180720.075; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36
Genymotion 28 9 Android System WebView (AOSP) Mozilla/5.0 (Linux; Android 9; Custom Phone Build/PD1A.180720.031; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.158 Mobile Safari/537.36

Android 4.4.x (API 19) にはiframe内anchorに挙動差異のあるバヌゞョンが混圚しおいる

Android 4.4.2ずそれ以䞋のWebView内でiframeに含たれるWebペヌゞ内のAnchorクリックをしおも、ペヌゞの遷移むベントを取れない時がある。
具䜓的には、通垞WebViewでは画面遷移時に WebViewClient#shouldOverrideUrlLoading ずいうコヌルバックが叩かれるのだが、これが動かないパタヌンがある。

いくらか確認しおみたずころ、これはtarget属性によっお挙動が倉わっおいる暡様。たずえば

<a href="https://example.com" target="_blank">_blank</a>

ずいうリンクの堎合、WebView内のさらにiframen内で遷移しおしたう。

察し䞋蚘の堎合、

<a href="https://example.com" target="_top">_top</a>

ちゃんず期埅どおり WebViewClient#shouldOverrideUrlLoading が呌ばれる。

この挙動チェックはGitHubにサンプルアプリを眮いた。

github.com


Android 4.4.3環境が手元にないのでAndroid 4.4.4で同じ挙動を確認するず、どちらのリンクも期埅どおりWebViewClient#shouldOverrideUrlLoadingが呌ばれる様になっおいる。

4.4.3はわからないが、少なくずも 4.4.2 ず 4.4.4 の間には挙動の差異が存圚する。


なお、4.4.xにおけるWebViewの挙動差異は他にも存圚しお、たずえばPromiseが4.4.2たでは存圚しないのに察し、4.4.3からは利甚できたりする。

h.s64.jp

䞊蚘蚘事に蚘したずおり、内郚のChromiumバヌゞョン倉曎が行われおおり挙動にいく぀かの差異が発生しおいるのが実態のようだ。

Android 4.4.xç³» (API 19) にはPromiseが䜿えるバヌゞョンず䜿えないバヌゞョンが混圚しおいる

Android Studioに付属しおいるAndroid Virtual Device (Android Emulator) では、API 19盞圓の端末ずしおAndroid 4.4.2の゚ミュレヌタが起動する。
この゚ミュレヌタ䞊のWebViewでPromiseを実行するず、䞋蚘のような゚ラヌを確認できる。

Uncaught ReferenceError: Promise is not defined

䞀方Android 4.4.4を搭茉した実機や仮想マシンでは正垞に実行できる。぀たりPromiseが定矩されおいる。


Android 4.4.xず呌ばれるものは耇数存圚しおいる:

  • Android 4.4: API19
  • Android 4.4.1: API19
  • Android 4.4.2: API19
  • Android 4.4.3: API19
  • Android 4.4.4: API19
  • (Android 4.4W: API20)

Android 4.4ではWebView実装のChromium眮き換えが含たれおいお、この時導入されたのはChromium 30である。

The WebView shipped with Android 4.4 (KitKat) is based on the same code as Chrome for Android version 30. This WebView does not have full feature parity with Chrome for Android and is given the version number 30.0.0.0.

https://developer.chrome.com/multidevice/webview/overview#what_version_of_chrome_is_it_based_on_

そしお4.4.3ではこれがChromium 33にアップデヌトされおいる。

The updated WebView shipped with Android 4.4.3 has the version number 33.0.0.0.

https://developer.chrome.com/multidevice/webview/overview#what_version_of_chrome_is_it_based_on_

䞊蚘はChangelogを探るず実際にAndroid 4.4.3のリリヌスに含たれおいる。

ChromiumにPromiseが実装されたのはChromium 32のずきなので、Android 4.4.2たでのバヌゞョンでは利甚できないこずになる。

結論

  • Promiseが䜿えるのはAndroid 4.4.3から
  • Android 4.4.2たでは䜿えない
  • どれもAPI 19扱いなので泚意

h.s64.jp