[一応解決]com.google.android.gms.common.api.ApiException: 5000でハマった件

AndroidのFitnessAPIを使ってヒヨコ歩数計を作成する中で、どうしても失敗するところがあり、とりあえず暫定対応で解決したので備忘

エラー内容

com.google.android.gms.common.api.ApiException: 5000: Application needs OAuth consent from the user

歩数取得の前で認証がうまくいってない模様だが、ググっても全く出てこず。。。
ステータスコード5000を調べてみると何となくそれっぽい一覧に到着する↓

GoogleのFitnessStatusCodes

https://developers.google.com/android/reference/com/google/android/gms/fitness/FitnessStatusCodes#public-static-final-int-success_no_data_sources

原文

The subscribe request succeeded, but no data sources are currently available that match it. Recording of data will start when data sources become available.」

翻訳文

サブスクライブリクエストは成功しましたが、それに一致するデータソースは現在利用できません。 データソースが利用可能になると、データの記録が開始されます。

解決方法

結局エラーの意味はわからず色々試行錯誤した結果、FitnessAPI用のライブラリのバージョンを落とすことで解決

build.gradleのdependenciesの修正

修正前

「implementation ‘com.google.android.gms:play-services-fitness:20.0.0’」

修正後

「implementation ‘com.google.android.gms:play-services-fitness:18.0.0‘」

既存コードの修正

20.0.0では非推奨になっていたが、18.0.0では使用できないので以下のように修正

20.0.0(修正前)
DataReadRequest.Builder()
        .aggregate(DataType.TYPE_STEP_COUNT_DELTA)
        .aggregate(DataType.TYPE_DISTANCE_DELTA)
        .bucketByTime(1, TimeUnit.DAYS) 
        .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
        .build()
18.0.0(修正後)
DataReadRequest.Builder()
        .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
        .aggregate(DataType.TYPE_DISTANCE_DELTA, DataType.AGGREGATE_DISTANCE_DELTA)
        .bucketByTime(1, TimeUnit.DAYS) 
        .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
        .build()

お知らせ

ヒヨコ歩数計という歩きながらヒヨコが育っていくアプリを作って、いろんな方に結構使ってもらっています。
RealmSwift, Admobの動画・インステ・バナー広告、UICollectionView、iOS-Charts、UITableViewを使用しているので、是非ご利用ください!