ねこでじ(Nekodigi)

Nekodigi’s diary

学習中の気づきをまとめています。応援よろしくお願いします

【Stripe】自作アプリを収益化しよう!使用量に応じたサブスクを簡単に適応

収益化はめんどくさい!

実装が大変な使用量に応じたサブスクリプションを簡単に適応できるシステムを開発しました。既存のアプリに、ログインリンクと使用量通知機能を追加するだけで、最小限の労力で収益化が可能です。
サブスクリプション機能の実装は、買い切りのシステムに比べてはるかに難しいです。加えて、単純なサブスクリプションではヘビーユーザーによって赤字になる可能性があり、利用制限も考慮する必要があります。
そこで、過剰な使用を抑えると同時に、新規ユーザーが無料枠を使ってしっかりと体験できるシステムを開発しました。無料ユーザーにも有料ユーザーにとっても使いやすいシステムになっています。

使い方

利用者の手順

  1. ログインリンクからログインします。ログインしなくても、無料枠の使用は可能です。

  2. プランに加入します。支払いは1ヶ月ごとに行われ、追加のTokenがもらえます。

  3. プラン加入後にTokenがなくなった場合は、追加で購入することができます。

管理者の手順

  1. Firestoreにデータ登録 Firestoreにプラン情報を登録します。
/payment/[service_id]
id: string
name: string
allocQuota: string
remainQuota: string
updateAt: Date
plan: {
        free: {//free, basic...
            priceId: string  //price id in stripe
            currency: string  //used for display
            price: number
            mode: string
            quota: number
            quotaLeak: number //quota*[x]  (contribute global quota)
        }
}

2.ログインリンクの設置 ブラウザ毎に固有のID(ユーザーID)を取得し、それを含むログインURLを作成します。
GET [api_url]/subscription/url/:service_id/:user_id/:plan_id?success_url&cancel_url

3.課金対象の動作で、使用量通知 対象動作のコストに応じて、Tokenを使用する指示を出します。 ここでは、固有IDを渡す必要があります。
PUT /quota/use/:service_id/:user_id?amount=

※詳細については開発ドキュメントをご覧ください
Service Framework

デモ

https://service.nekodigi.com/pinyin-ocr

ソースコード

フロントエンド:GitHub - Nekodigi/charge-framework-frontend
バックエンド:GitHub - Nekodigi/charge-framework-backend

今後の課題

他のユーザーに対して操作を行うことはできませんが、自分のユーザーIDがわかっている場合は、Tokenの追加割り当てが可能です。不正使用を防止するために、APIキーを必要にするようにしたいと考えています。
サーバーダウン時のデータを蓄積するために、ログを管理するシステムを並行して実行したいと考えています。
現在は英語のみですが、多言語対応も実現したいです。