Androidアプリ開発 GoogleAPI連携 the name must not be empty: null
目次
AndroidアプリデータのバックアップにGoogleDriveを使う
Androidアプリの開発でGoogleDriveにバックアップファイルを作成するという実装を行いました。
バックアップ実装内容の詳細は後日記載しますが、ここではハマった現象をお伝えしたいと思います。
今回やったことは、アプリデータをzipファイルにしてGoogleDriveにアップロードするというものです。
使用したのはDrive API REST version 2です。
最新のversion 3を使用していないのでご注意ください。
ローカル開発環境で正しくバックアップファイルのアップロードとダウンロードができたので、他のメンバーに確認してもらったら動きませんでした。
最初にアカウント選択画面が表示されて、選択まではできる。
でも、アップロードするとエラーが起きてしまうという形でした。
the name must not be empty: nullというエラー
エラー内容は「the name must not be empty: null」でした。
以下のような状況でした。
・同一Googleアカウントで実験した時に、エミュレータでは動かず、実機では動く
同一Googleアカウントで試したところ、あるエミュレータでは正しく動かず、ある実機では正しく動くことを確認しました。
このことからアカウントごとの(設定など)問題ではないと判断しました。
・一部実機では正常に動く、動かない実機もある
実機確認を行いましたが、正しく動くものとそうでないものがありました。
このことからエミュレータでは動かないというものを排除し、デバイスのAPI、targetバージョンなどが原因ではないかと考えました。
デバックの結果、
GoogleAccountCredential.javaのgetToken()内部でエラーが吐かれていました。
このgetToken()の中では、accountNameを使っており、それがnullだよとのことです。
原因は、account情報を正しく取得できていないことです。
developer.android.com
こちらのページに記載がありましたね。
Note: Beginning with Android 6.0 (API level 23), if an app shares the signature of the authenticator that manages an account, it does not need "GET_ACCOUNTS" permission to read information about that account. On Android 5.1 and lower, all apps need "GET_ACCOUNTS" permission to read information about any account.
・対応策
AndridManifest.xmlに以下の一文を追加しましょう。
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
以上です。