◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/ビジネス
⟐ ビジネス/2026-05-05上級

Rork MaxでiOSとAndroidを同時展開して収益を倍にする — デュアルストア収益化の設計

Rork Maxを使ってiOSとAndroidを同時に運用し、RevenueCatとAdMobで課金と広告を一元管理する収益設計。プラットフォーム別の価格設計・AdMobメディエーション・ATT対応・LTV計算まで、実運用の数字を交えて解説します。

Rork Max236iOS115Android55クロスプラットフォーム7RevenueCat30AdMob73収益化68デュアルストア

✦ プレミアム記事

Android版を出した最初の月、AdMobの管理画面を開いて、数字の桁を二度見しました。iOSと同じ広告ユニット構成を入れたつもりだったのに、表示回数と収益の比が明らかに噛み合っていないのです。原因はネットワーク側ではなく、レポートの単位を私が読み違えていたことでした。

それ以来、デュアルストアの運用でいちばん時間を割いているのは、収益を増やす施策ではなく、収益の見え方を壊さない仕組みづくりです。単価は交渉できませんが、単位と桁は自分で守れます。 ここを守れているかどうかで、月初に見る数字の意味が変わってしまうのだと気づいたのは、一度桁を間違えたあとでした。

Rork MaxはネイティブなSwiftUIアプリの生成に強く、土台がReact Nativeであることを活かせばAndroidにも広げられます。ここでは課金と広告の設計、そして集計まわりで私がつまずいた箇所を順に書き残します。金額そのものはジャンルと地域構成で桁が動くため、断定できる数字は出しません。代わりに、どこを測り、どこで取り違えやすいのかを残しておきます。

iOSとAndroidで課金行動が違う理由

同じアプリを出しても、プラットフォームによって収益の構造が変わります。この違いを理解せずに「とりあえず両方出す」だけでは、せっかくの展開機会を活かしきれません。

App Store(iOS)の課金特性

iOSユーザーは課金転換率が高い傾向があります。App Storeの決済体験が磨かれており、Face IDでの1タップ決済が抵抗感を下げています。

  • サブスクリプション転換率: 無料試用から有料への転換が比較的高い(5〜15%が現実的なレンジ)
  • ARPU(一人あたり平均収益): Androidより高い傾向(一般的に1.5〜2倍)
  • 審査の厳格さ: 課金フローと広告表示について、厳しい基準が敷かれています

Google Play(Android)の課金特性

Androidは絶対数が多く、特定の地域(東南アジア・インド・中南米)では相応のシェアを持ちます。課金転換率はiOSより低いものの、ダウンロード数の多さがカバーします。

  • ダウンロード量: iOSの2〜3倍のダウンロード数が一般的
  • 広告収益: DAU(デイリーアクティブユーザー)が多いため、AdMob収益はAndroidで大きくなりやすい
  • 審査の柔軟性: App Storeより審査基準が緩いケースが多く、機能の多様性を出しやすい
プラットフォーム別の収益構造(アプリ種別ごとの典型例):

ユーティリティ・ツール系:
  iOS:     月額サブスクが主収益 → 課金転換率重視
  Android: 広告 + 課金の複合型 → DAU最大化重視

ゲーム・娯楽系:
  iOS:     IAP(アプリ内購入)+ 少量の広告
  Android: 広告メイン + IAP(広告のARPDAU高め)

習慣・ライフスタイル系:
  iOS:     高単価サブスク(月額¥1,200〜¥3,600)
  Android: 低単価サブスク + 広告(¥500〜¥1,500)

RevenueCatで両プラットフォームの課金を一元管理する

クロスプラットフォームで課金実装するとき、最も避けるべきはiOSとAndroidで別々の課金ロジックを書くことです。バグが2倍、デバッグコストが2倍になります。

RevenueCatは、App StoreとGoogle Playの両方をひとつのSDKで抽象化します。

古い記事を参考に import Purchases と書くとビルドが通りません。モジュール名は途中で RevenueCat に変わり、ユーザー識別も logIn(_:) が第一引数にラベルを取らない形になりました。ここは検索で出てくる断片をそのまま貼ると必ず詰まる箇所です。

// iOS + Android共通の初期化(React Native / Expo でも同様)
import RevenueCat
 
// アプリ起動時
Purchases.configure(withAPIKey: "YOUR_REVENUECAT_API_KEY")
 
// ユーザー識別(ログイン後に呼ぶ)
Purchases.shared.logIn(userId) { (customerInfo, created, error) in
    if let info = customerInfo {
        self.updateSubscriptionStatus(from: info)
    }
}
 
func updateSubscriptionStatus(from info: CustomerInfo) {
    let isSubscribed = info.entitlements["premium"]?.isActive == true
    let expiresDate = info.entitlements["premium"]?.expirationDate
    
    DispatchQueue.main.async {
        self.isPremium = isSubscribed
        self.premiumExpiresDate = expiresDate
    }
}
// 購入フロー(プラットフォーム問わず同じコード)
func purchase(packageId: String) async throws {
    let offerings = try await Purchases.shared.offerings()
    
    guard let package = offerings.current?.availablePackages.first(where: { 
        $0.identifier == packageId 
    }) else {
        throw PurchaseError.packageNotFound
    }
    
    let result = try await Purchases.shared.purchase(package: package)
    
    if result.customerInfo.entitlements["premium"]?.isActive == true {
        // 購入成功
        await updateUI(isPremium: true)
    }
}

プラットフォーム別の価格設計

同じアプリでも、iOSとAndroidで価格を変えることを検討すべき場合があります。

月額サブスクリプション価格の設計例:

iOSの場合(高ARPU、課金転換率重視):
  Lite:    ¥480/月
  Pro:     ¥1,200/月  ← 主力プラン
  Annual:  ¥9,800/年(月換算¥817・33%オフ)

Androidの場合(ダウンロード数重視、転換率は低め):
  Lite:    ¥380/月    ← iOSより低めに設定
  Pro:     ¥980/月
  Annual:  ¥7,800/年(月換算¥650・33%オフ)

理由:
- Androidユーザーは価格感度が高い傾向
- 転換率を上げるために参入ハードルを下げる
- 年額プランでLTVを確保する構造は共通

RevenueCatでプラットフォーム別の価格を設定するには、App Store ConnectとGoogle Play Consoleそれぞれで別の製品IDを作成し、RevenueCatのダッシュボードで「Offering」として管理します。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦RevenueCat の Webhook を自前のデータベースへ溜めて、課金と AdMob の広告収益を月次で突き合わせる集計の作り方
✦Swift に os(Android) が無いことを踏まえた広告ユニットIDの分岐と、iOS / Android で値が違うテストIDの扱い
✦ATT・メディエーション・年額プラン比率という、iOS と Android で配分を分ける実務上の根拠
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⟐ ビジネス2026-05-05
Rork Max × RevenueCat Paywalls SDK で変わるペイウォール開発 — A/B テスト・リモート更新・コンバージョン改善の実装ガイド
RevenueCat Paywalls SDK を Rork Max アプリに統合し、審査なしでペイウォールをリモート更新・A/B テストする実装ガイド。コンバージョン率を改善するデザイン原則と実践コードをまとめます。
⟐ ビジネス2026-05-15
運用中の壁紙アプリをRork Maxで作り直した記録:工程別の実作業時間と再リリース後の指標
運用中の壁紙アプリをRork Maxでゼロから再実装し、工程ごとに実作業時間を計測しました。生成コードが取り違えた仕様、既存サブスクリプションの引き継ぎ手順、再リリース後30日のクラッシュ率と転換率まで数字で記録しています。
⟐ ビジネス2026-04-26
Rork Max のネイティブアプリを App Store 上位へ — 設計から AdMob・StoreKit 2・サブスクまでの順番
Rork Max で作った SwiftUI ネイティブアプリを、カテゴリ上位に残るアプリへ育てるための順番を書き残します。広告を出すかどうかを1か所で決める AdGate、StoreKit 2 の Transaction.updates 監視、ASO とリテンションの線引きまで、動くコード付きです。