🐤

AndroidのエミュレータにGooglePlayがインストールされてるか確認しようねという話

2023/09/14に公開

Aqualist というアプリのアプリ内課金を react-native-iap で実装していたところ、ios側の課金が実装できたので、 よしっそのままAndroidもいくか〜!! と意気揚々としていた矢先に軽くハマった話をします。

状況

react-native-iap を使ってアプリ内課金を実装しました。
https://github.com/dooboolab-community/react-native-iap

iosの方で問題なくテスト課金できたので、少しAndroid用に手を加えて、Androidエミュレータ起動したところ、エラーが発生。

Error: Billing is unavailable. This may be a problem with your device, or the Play Store may be down.

どうやら、getSubscriptions() でエラーがでているみたいだった。

Subscription
import { getSubscriptions } from "react-native-iap";

// Subscriptionを取得
const subscriptions = await getSubscriptions({skus: [subscriptionIds[1], subscriptionIds[12]]}) ?? [];
subscriptions.forEach((subscription) => {
  if (subscription.productId === subscriptionIds[1]) {
    // 1ヶ月プランをセット
    setOneMonthPlan(subscription);
  } else if (subscription.productId === subscriptionIds[12]) {
    // 12ヶ月プランをセット
    setTwelveMonthPlan(subscription);
  }
});

試した事

純粋にエラー内容を見てみると、「デバイスかPlay Storeがダウンしてね〜か?」と言っている。
エラー内容でググるとGithubにissue上がっていたのを発見。
https://github.com/dooboolab-community/react-native-iap/issues/1243

This is expected in the Android emulator. This library does not work on emulators.

見ると「エミュレータで react-native-iap はつかえねーよ?」と言っているではないか...
え...まさか実機Android端末を調達する羽目になるか...?

その後色々とググってみたが、特に解決策が見当たらず...

原因

なんやかんやで、communityのissueを読み漁っていると同じことに直面している人が上記issueより前に上げていたのを発見。
https://github.com/dooboolab-community/react-native-iap/issues/221

すると

I think the play service is not installed in your device or you are not logged in to playstore. Could you check that?

訳:「Google Playインストールされてないか、ログインしてないんちゃう?」

ん??Googleにはログインしてるぞ??と思いながらも、恐る恐る Android Studio から Virtual Device Manager を開いて、起動してるemulatorを確認すると...

Google Playインストールされてないやんけっ!!!!

という事で、Google Playがインストールされてないemulatorを使用しているのが原因でした😇
(※ 端末のSettingでgoogleアカウントでログインする箇所がありますが、それはGoogle Playとは全く別物でした)

終わりに

とても初歩的な事でハマったよ。というお恥ずかしめを受ける記事でした😇(ぐぬぬ)

もし同じ過ちを犯した方の参考になれば幸いです。

GitHubで編集を提案

Discussion