AndroidのWebViewでOauth認証ができない話(解決法)
Softbank版XperiaZ3をAndroid4.4.4から5.0.2にアップデートしてから
アプリ内でのOauth認証(ログイン)を行うときに認証ができずにしばらく繰り返すとIDを入力するテキストボックスをアクティブ状態にするとアプリが落ちる
という問題が発生するようになりました。
この問題を認知してからしばらく何も気にせずに過ごしていましたが、これによりTwitterでの認証を行えないという大問題に繋がったので解決を試みたところ無事に解決できましたのでここにメモ書きとして残しておきます。(この様なメモ書きは地味だが傾向としてアクセス数が多い事を学んだ)
とりあえずこれを解決できないと非常に困るので、誰かこの問題を知らないかとTwitterで聞いてみました
AndroidでサードパーティのTwitterやつをOauthで認証するときにIDを入力しようとテキストボックスをタッチすると落ちるんだけど対処法知ってる人いませんか?
— たけのこさん (@t4k3nok0) 2015, 11月 25
が、誰にも言及されませんでした。単に僕の人望がないだけと言う可能性が高いですが誰もわからないと言う可能性も捨て切れません、というわけで解決策を自分で考えることが必要になりましたのでなんとか解決しました。
今回この Oaurh認証(ログイン)時にIDを入力しようとするとアプリが落ちる と言う問題は Android 5.0.2 で起きました。
私が初めてこの問題にぶち当たったのはDropboxでのOauth認証でした、某ファイル管理アプリ内からDropboxの利用をする為に認証を行った所、正しいIDとパスワードを入力しているのにも関わらず何故か認証が成功せずしばらくするとアプリが強制終了してからその後も同じようにIDを入力しようとするとクラッシュするという状態になりました。※事例1
最初は何も考えず「サードパーティー製のアプリのバグだ」と勝手に仮定してそのまま認証を諦めてしまいました。
しかしそれから一週間程して事例1を忘れた頃に、某読書状況管理アプリ内でTwitterアカウントでログインする為にOauth認証を行おうとした際に先ほどの 事例1 と同じように正しいIDとパスワードを入力しているのにも関わらず認証されずにアプリが落ちるという全く同じ問題が起きたことに気づきました。※事例2
某読書状況管理アプリはWebサービスが存在していて、試しにAndroidのGoogleChromeからWebサービスの方にTwitterアカウントでログインしてみた所、特に問題もなくに認証されて正常にサービスを利用できることを確認しました。 ※事例3
事例1と事例2ではOauth認証(ログイン)ができず、事例3では正常に行えるという点を比較した時に決定的な違いとして アプリ内でOauth認証を行っているか否か という点があることを発見しました。 事例1でも事例2でもアプリ内ブラウザで認証が行われるシステムとなっていてこの時には、アプリ内で認証をするシステムはAndroidアプリ開発をする上でWebコンテンツを簡単に表示できる様にする WebView というものが利用されているという共通点に気づきました。
WebViewが悪いのか?
— たけのこさん (@t4k3nok0) 2015, 11月 25
この時点で仮定として WebViewが悪さをしている という事を考えたところ Android lollipop (5.0~)から WebViewがアプリとして独立し(?)googleplayストアでアップデートが提供されるようになったという事を考えました。 そこでAndroid LollipopのWebViewについて検索をした所以下のような記事を発見しました
最近多いAndroidでアプリが落ちる症状や「予期せぬエラー」はWebViewの最新アプデが原因かも。 : スマホ口コミ評価速報 https://t.co/kbcjgpj8ku
これかな
— たけのこさん (@t4k3nok0) 2015, 11月 25
記事内にはこのように記述されていました
海外でも、かなり複数のユーザーがこの「WebView」を最新バージョンにアプでした直後から「アプリ落ち」を報告しています。
原因は不明で、根本的な問題改善には次回のアップデートを待つしか方法はないようですが、応急処置としては:
「設定」→「アプリ」→「Android System WebView」→「アップデートのアンインストール」
で、バージョンを一つ前のに戻すことで、アプリが頻繁に落ちるという症状は軽減するようです。
とりあえずWebViewの最新アップデートをアンインストールしてみた
— たけのこさん (@t4k3nok0) 2015, 11月 25
うお、治った!
— たけのこさん (@t4k3nok0) 2015, 11月 25
つまり解決策としては
Android LollipopのWebViewの最新版が原因なので最新版アップデートをアンインストールする
というものが有効なようです。
手順としては上記の引用通り
設定 から アプリ を選択した後 すべて という欄にある Android System WebView を選択後 アップデートのアンインストール ボタンを押し最新版をアンインストールする
という事で簡単に対処することができ、無事にDropboxもTwitterも認証することが可能になりました!
最近では様々なサービスが普及しサービスに他サービスのアカウントでログインをするなんてことも増えたのでこのような不具合はユーザにとってはかなり痛いものとなるに違いありません。同じような不具合に悩まされている人の助けになったら幸いです。
という事をメモ書きとして残しておきます。