RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/開発ツール
開発ツール/2026-04-07上級

RevenueCat 上級ガイド — Win-Backキャンペーン・オファーコード・解約防止フローで LTV を最大化する

RevenueCat の高度な機能を活用して解約を防止し、離脱ユーザーを呼び戻す方法を解説。オファーコード・Win-Backキャンペーン・グレースピリオド・解約フローのUX設計まで網羅した実践ガイドです。

RevenueCat28Rork Max229サブスクリプション63チャーン対策3オファーコード2Win-BackLTV最大化

プレミアム記事

解約通知を最初に受け取ったときのことを、今でも覚えています。個人でアプリを運用していると、ダウンロード数のグラフばかりを追ってしまいがちですが、本当に収益を左右するのは「一度離れた人が戻ってくるかどうか」でした。

サブスクリプションアプリでは、獲得コスト(CAC)を下げる努力と同じ重み——いえ、それ以上の重みで、既存ユーザーをつなぎとめる設計が効いてきます。月間解約率(Churn Rate)がわずか1%改善するだけで、LTV(顧客生涯価値)は数十%単位で伸びることも珍しくありません。守りの一手が、そのまま次の攻めの余力になります。

以下では、RevenueCat の解約防止機能を、Rork Max で作ったアプリに実装する手順を追っていきます。私自身が個人開発で試してきた順序——設定だけで効く即効性の高い施策から、データを積み上げて効果を測る中長期の設計まで——を、実際に手を動かす流れで並べました。

RevenueCat の解約防止エコシステムを理解する

まず、RevenueCat が解約対策に提供するツールを整理しておきましょう。

Offerings(オファリング)と Packages(パッケージ) サブスクリプションの種類(月額・年額・生涯)を管理する単位です。Win-Back Offers もここで定義します。

Promotional Offers(プロモーショナルオファー) Apple StoreKit 2 / Google Play Billing に対応した割引オファーです。既存・元契約者向けの特別価格を提示できます。

Offer Codes(オファーコード) SNSキャンペーン・メルマガ・インフルエンサー経由で配布する無料/割引コード。一定期間のトライアルや割引サブスクリプションを提供できます。

Grace Period(グレースピリオド) 決済失敗時に一定期間(iOS: 最大16日、Android: 最大30日)サービス継続を許可する機能。Involuntary Churn(意図しない解約)を削減します。

Webhooks & Event Streams 「試用期間終了」「更新失敗」「解約」などのライフサイクルイベントをバックエンドで受信し、適切なフォローアップアクションを自動化できます。

オファーコードの実装

App Store Connect でオファーコードを作成する

App Store Connect の「App内課金」>「サブスクリプション」から、対象サブスクリプションを選択し、「オファーコード」タブで作成します。

  • オファータイプ: 無料期間、割引、固定価格(Pay Up Front)の3種類
  • コード数: 最大1,000コード/オファー(バッチ生成可能)
  • 期間制限: 終了日を設定して期間限定キャンペーンに活用

Rork Max でコード入力UIを実装する

import Purchases, { PurchasesStoreProduct } from 'react-native-purchases';
 
// オファーコード入力画面
export const RedeemOfferCodeScreen = () => {
  const [code, setCode] = useState('');
  const [isLoading, setIsLoading] = useState(false);
  const [error, setError] = useState<string | null>(null);
 
  const handleRedeem = async () => {
    setIsLoading(true);
    setError(null);
 
    try {
      // iOS: presentCodeRedemptionSheet() で Apple 標準UIを表示
      await Purchases.presentCodeRedemptionSheet();
 
      // コード適用後に購読ステータスを更新
      const customerInfo = await Purchases.getCustomerInfo();
      const isPremium = customerInfo.entitlements.active['premium'] !== undefined;
 
      if (isPremium) {
        // 成功 → プレミアム機能アンロック
        navigation.replace('PremiumHome');
      }
    } catch (e: any) {
      setError('コードの適用中にエラーが発生しました。もう一度お試しください。');
    } finally {
      setIsLoading(false);
    }
  };
 
  // Android: カスタムコード入力UIを実装
  const handleRedeemAndroid = async () => {
    setIsLoading(true);
    try {
      // Google Play のコード適用API
      const offerings = await Purchases.getOfferings();
      // Android は Google Play の標準フローでコードを適用
    } catch (e) {
      setError('Android コードの適用に失敗しました。');
    } finally {
      setIsLoading(false);
    }
  };
 
  return (
    <View style={styles.container}>
      <Text style={styles.title}>特別オファーコードを入力</Text>
      <Text style={styles.description}>
        メルマガやSNSで受け取ったコードを入力して、特別割引を適用してください。
      </Text>
      <TouchableOpacity
        style={[styles.redeemButton, isLoading && styles.disabled]}
        onPress={Platform.OS === 'ios' ? handleRedeem : handleRedeemAndroid}
        disabled={isLoading}
      >
        {isLoading ? (
          <ActivityIndicator color="#fff" />
        ) : (
          <Text style={styles.buttonText}>コードを適用する</Text>
        )}
      </TouchableOpacity>
      {error && <Text style={styles.errorText}>{error}</Text>}
    </View>
  );
};

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

この記事の続きを読む

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

この記事で得られること
RevenueCat の Win-Back を15%ホールドアウトで測る設計と実装コード
意図しない解約 対 意図的な解約 — アプリの状況別・施策の優先順位マップ
Grace Period・Cancellation Survey・Win-Back を段階導入する実務手順
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-06-25
機内モードで開くと有料会員にペイウォールが出る — RevenueCat の権限をオフラインでも保つキャッシュ設計
電波の弱い場所でアプリを開いた有料会員に、一瞬ペイウォールが見えてしまう。RevenueCat の customerInfo がオフライン起動で揺れる仕組みと、最後の正解を信頼期限つきでキャッシュして権限を維持する設計を、Expo アプリの動くコードで整理します。
開発ツール2026-06-15
解約だと思って権限を切ったユーザーは、まだ払う気だった — 支払い猶予期間と権限維持の実装
購読の支払いが失敗しても、それは解約ではありません。猶予期間中に権限を切ると復帰可能な売上を自分で捨てます。Rork(Expo)アプリで猶予・課金リトライ・アカウントホールドを取り違えず、権限維持と復帰導線を出す実装をまとめます。
開発ツール2026-06-14
Rork のサブスクを RevenueCat の Entitlement で組む — アクセス判定・Offering 駆動のペイウォール・復元の実装メモ
Rork(Expo)アプリの課金を RevenueCat で実装する際の設計メモです。Entitlement を唯一の真実とするアクセス判定、Offering 駆動でハードコードを避けるペイウォール、購入復元とリスナーの実装、サンドボックスで詰まりやすい点まで動くコードで整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →