もう迷わない！Expo Managed WorkflowでのGoogle Play Billing Libraryバージョンアップ要求への対処法

---
## Play Billing Libraryのバージョンエラーを解決！Expo Managed Workflowでの試行錯誤

こんにちは、mk-mokumokuこと渡邊琢資です。今回は、Google Playへのアプリ公開時に遭遇した「Play Billing Libraryのバージョンアップ要求」エラーについて、Expo Managed Workflowでの解決策を共有したいと思います。多くの情報とは異なるアプローチで解決に至ったので、同じ壁にぶつかっている方の助けになれば幸いです。

---

### 第1章：RevenueCat導入の道のりで現れた、Google Playからの警告

私のReact Nativeアプリにアプリ内課金を導入するため、以前も紹介した**RevenueCat**というサービスを利用することにしました。

**RevenueCat**とは、アプリ内課金の実装と管理を劇的にシンプルにしてくれる強力なプラットフォームです。iOSのApp StoreとAndroidのGoogle Playの課金システムとの複雑な連携を抽象化し、サブスクリプションの管理、顧客の獲得状況の追跡、収益の分析などを一元的に行えるようにしてくれます。開発者は各プラットフォームの課金APIの仕様に詳しくなくても、RevenueCat SDKを導入するだけで簡単にアプリ内課金を実現できるため、非常に人気の高いサービスです。

RevenueCatを導入するにあたり、Androidアプリで課金機能を利用するためには、**`com.android.vending.BILLING`** というパーミッションが必要になることを知りました。これは、アプリがGoogle Playストアと通信して課金処理を行うための必須の権限です。

順調に開発を進め、いよいよアプリをGoogle Playに公開しようとしたところ、Google Play Consoleから次のようなエラーが表示されました。

```
Your app currently uses Play Billing Library version AIDL and must update to at least version 6.0.1 to make use of the latest monetization features on Google Play.
```

「Play Billing Libraryのバージョンが古いから、6.0.1以上に上げてね」という内容です。

---

### 第2章：一般的な解決策と、Managed Workflowのジレンマ

このエラーメッセージを頼りに解決策を探してみると、多くの記事やフォーラムで次のような`AndroidManifest.xml`の編集方法が紹介されていました。

<meta-data android:name="com.google.android.play.billingclient.version" android:value="7.0.0" />

これは、Androidのアプリ設定ファイルである`AndroidManifest.xml`に、Play Billing Libraryのバージョンを直接指定するものです。しかし、私は**Expo Managed Workflow**で開発を進めていたため、この方法には抵抗がありました。

Managed Workflowは、`AndroidManifest.xml`のようなネイティブのファイルを直接編集することなく、JavaScriptの設定ファイル（`app.json`）を通じてアプリの設定を管理できるのが大きなメリットです。`AndroidManifest.xml`を直接いじるのは、まるでManaged Workflowの恩恵を自ら手放してしまうような気がしたのです。

そこで、`AndroidManifest.xml`の代わりに**`app.json`に設定を記述する**方向で解決策を探し始めました。

---

### 第3章：試行錯誤のパーミッション設定

`app.json`でパーミッションを設定する方法について調べると、多くの情報源で以下のように記載するように勧められていました。

```json
{
  "expo": {
    "android": {
      "permissions": [
        "com.android.vending.BILLING"
      ]
    }
  }
}
```

「これでGoogle Play Billing Libraryのパーミッションが追加されて、バージョンエラーも解決するはず」と思い、この設定を`app.json`に追加し、再度ビルドしてGoogle Playにアップロードしました。

しかし、残念ながらGoogle Play Consoleに表示されるエラーは**一向に消えません**。何度試しても同じ警告が表示され続け、途方に暮れました。`com.android.vending.BILLING`を追加しただけでは、ライブラリのバージョンアップ要求は満たされないようでした。

---

### 第4章：見つけた光明！バージョン指定パーミッション

八方塞がりかと思われたその時、ついに解決策を見つけました。それは、`app.json`の`android.permissions`に、**パーミッション名と同時にバージョンも指定する**という、少し変わった記述方法でした。

```json
{
  "expo": {
    "android": {
      "permissions": [
        "com.android.vending.BILLING:7.0.0"
      ]
    }
  }
}
```

`com.android.vending.BILLING`の後にコロン（`:`）をつけ、その直後に必要なバージョンである`7.0.0`を記述するだけ。この一行を追加してビルドし直したところ、Google Play Consoleでのバージョンエラーが**きれいに解消**されました！

この記法は、`AndroidManifest.xml`を直接編集するのと同じ効果を、Managed Workflowの範囲内で実現するためのExpo特有の方法だったようです。多くの一般的な情報源にはこの具体的な記法が載っておらず、試行錯誤の末に見つけた解決策でした。

---

### まとめ：Expo Managed Workflowの柔軟性を活かす

今回の経験から、Expo Managed Workflowは非常に便利である一方で、特定のネイティブ機能（特にGoogle Play Billing Libraryのバージョン管理のように、プラットフォームが厳しく管理している部分）を扱う際には、その**独自の記述ルール**を理解することが重要だと痛感しました。

もしあなたが同じようにExpo Managed WorkflowでGoogle Play Billing Libraryのバージョンエラーに遭遇したら、`app.json`の`android.permissions`に`"com.android.vending.BILLING:X.X.X"`（X.X.Xは必要なバージョン）と記述してみてください。きっと、あなたの悩みを解決する一助となるでしょう。

#### この記事があなたのエンジニアキャリアの一助になれば幸いです。
#### もしこの記事が役に立ったと感じたら、ぜひ「♡」で教えてください！