AndroidのエミュレータにGooglePlayがインストールされてるか確認しようねという話
Aqualist というアプリのアプリ内課金を react-native-iap で実装していたところ、ios側の課金が実装できたので、 よしっそのままAndroidもいくか〜!! と意気揚々としていた矢先に軽くハマった話をします。
状況
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()
でエラーがでているみたいだった。
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上がっていたのを発見。
This is expected in the Android emulator. This library does not work on emulators.
見ると「エミュレータで react-native-iap はつかえねーよ?」と言っているではないか...
え...まさか実機Android端末を調達する羽目になるか...?
その後色々とググってみたが、特に解決策が見当たらず...
原因
なんやかんやで、communityのissueを読み漁っていると同じことに直面している人が上記issueより前に上げていたのを発見。
すると
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とは全く別物でした)
終わりに
とても初歩的な事でハマったよ。というお恥ずかしめを受ける記事でした😇(ぐぬぬ)
もし同じ過ちを犯した方の参考になれば幸いです。
Discussion