web-dev-qa-db-ja.com

アプリ内購入で既存のiOS有料アプリをフリーミアムモデルに変換する

現在、ストアに有料アプリがあります。 Apple 'lite'バージョンの送信も許可されていないため、現在の有料バージョンをフリーミアム(アプリ内購入あり)モデルに更新する以外に選択肢はありません。初めてアプリを購入したv1ユーザーの機能が失われないという問題。

アプリケーションが以前にインストールされたバージョンから更新されているかどうかを判断して、アプリの有料部分のロックを解除できるようにする方法はありますか?

2つの同様の質問(数か月前から):

既存の有料アプリをアプリ内購入で無料バージョンに移行

iPhone +アプリストアの既存の有料アプリケーションをアプリ内購入で無料アプリケーションにアップグレード+すでに有料アプリケーションを購入した顧客はどうですか

52
fringley

IOSとmacOSの両方でこれを行うためのApple承認の方法があります。アプリの最初にダウンロードされたバージョンは、情報キーOriginal Purchased Versionを使用してレシートから取得できます。次に、そのバージョンがIAPへの切り替えよりも前の場合に、機能のロックを解除するかどうかを決定できます。

たとえば、領収書情報を取得すると、次のようになります。

NSArray *versionsSoldWithoutIAP = @[@"1.0", @"1.1", @"1.2", @"1.3"];
NSString *originalPurchasedVersion = [receiptInfoDict objectForKey:@"Original Purchased Version"];
for (NSString *version in versionsSoldWithoutIAP) {
    if ([version isEqualToString:originalPurchasedVersion]) {
        // user paid for the currently installed version
    }
}

詳細については、WWDC 13ビデオ 領収書を使用したデジタル販売の保護 を参照してください。 5:40に、プレゼンターは次のようにコメントしています。「今年のレシートにある最もエキサイティングなことは、特にストアに有料アプリをお持ちの場合は、レシートに情報が含まれていることです。すでにアプリの料金を支払っているすべての顧客を置き去りにすることなく、有料アプリから無料アプリへの移行を行います。」

21
spinacher

IOS7では、iOSアプリはアプリのダウンロード日を含むアプリストアの領収書を確認できます。このダウンロード日を使用することで、顧客が以前に購入されたかどうかを判断できます。

20
Arnold Tang

まず、個人的にはフリーミアムモデルは素晴らしいと思います。多くの開発者にとって、それはveryうまくいきました。人々は無料アプリをダウンロードするのが大好きで、気まぐれでそれを行いますが、0.99ドルを使う前にアプリにもっと注意を払ってください(これは無料の効果によるものです-詳細については、DanArielyの本をチェックしてください 予想どおりに不合理

フリーミアムの詳細については、グーグルで検索してください-フリーミアムの成功について書かれた記事はたくさんあります。


さて、実際の質問に戻りましょう。

このような状況を処理する方法はいくつかありますが、ここでの不幸な問題は、どれも絶対確実ではありません。

  • 最善の解決策は、おそらくユーザーがアカウントを持っていることでしょう。アプリの詳細がわからないと、ユーザーアカウントがアプリに適しているかどうかはわかりません。サーバーに保存されているユーザーアカウントには、ユーザー管理やユーザーが行った購入の追跡など、多くの追加の利点があります。これにより、アプリを削除してから再インストールするか、新しいデバイスを入手したユーザーは、購入したコンテンツを維持できます。さらに、アプリ内購入を使用するときはいつでも、サーバーベースのユーザー管理システムですべて実行できる独自のサーバー(またはApple)で購入を検証する必要があります独自のユーザー管理サーバーを作成することに頭を悩ませている場合は、 解析 を確認してください。驚くべきバックエンドサーバーを作成するのはとても簡単です(基本的に無料)
  • システムのiCloudキー/値タイプ。私はこれがどのように機能するかについてあまりよく知らないので、次に進みます。
  • もう1つは、絶対確実な解決策ではありませんが(ただし、実装がはるかに高速で簡単です)、NSUserDefaultsを使用することです。ユーザーが購入したとき、またはユーザーがアプリをインストールした日付でオブジェクトを保存できます。次に、アプリをフリーミアムに変換するアップデートを発行した場合。次に、新しいアップデートで、ユーザーが購入したものやインストールした日付を確認し、それに応じて対応します。 NSUserDefaultsを使用してこれを行う方法については、実装に関する別の質問に対する私の回答を確認してください: NSUserDefaultsおよびアプリのバージョン 。しかし、このソリューションには次の落とし穴があります。

  • ユーザーがアプリを削除すると、NSUserDefaultsは永久に失われます

  • ユーザーがNSUserDefaultシステムをセットアップする更新プログラムをインストールせずに、新しいフリーミアムモデルで更新プログラムをインストールした場合、アプリはコンテンツを購入していないかのように扱います。

夏には、これは難しい質問であり、簡単で完璧なオプションは多くありません。

とにかく、

お役に立てば幸いです。

11
Andrew

私は同じことを扱っていて、次のアイデアを思いつきました:新しい名前とアプリIDでフリーミアムバージョンを作成します。既存の有料アプリをアプリストアに保管しますが、価格を上げる不条理なものに、明確に述べるアプリは既存のユーザーのサポートを維持するためにあるという説明に新規ユーザーは、代わりにフリーミアムバージョンを試す必要があります。

既存の有料ユーザーは既存のアプリのサポートを失うことはなく、再購入せずにいつでも削除してインストールできます。

古い有料アプリを更新し続ける必要もありません。アプリストアに保管してください。

欠点は、既存の有料ユーザーがフリーミアムバージョンにスムーズに移行して、既存の機能にお金を払わずに将来追加する追加機能を取得できないことです。

これが私にとってうまくいくかどうかをまだ決定しようとしていますが、他の人にとっては良い選択肢かもしれません。コメントをいただければ幸いです。

2
Nicholas

私はこの問題についてしばらく考えていました。私の(App Storeの用語で)高価格のニッチアプリにかなりの数の顧客が支払いました。アプリ内購入モデルへの移行を計画しているので、再購入するように言わなければならないのは嫌です。

私が思いついたアイデア(そしてAppleそれが合法かどうかをサポートする)を尋ねる)は、現在の有料アプリを段階的に廃止するが、In-の「ロック解除」を可能にする最後のアップデートを出荷することです。アプリ内モデルに基づく新しいアプリのアプリ購入。チャレンジレスポンススキームについて考えていました。

  • ユーザーが自分のデバイスに有料アプリをインストールしました
  • ユーザーが新しいアプリ内アプリをインストールして開きます。新しいアプリは有料バージョンを検出し、アプリ内購入のロックを解除することを提案します(もちろん、このデバイスでのみ、アプリが削除されていない限り)
  • 新しいアプリはナンスを生成し、それに署名し、URLスキームを介して古いアプリを呼び出します
  • 古いアプリはナンスを復号化し、それに+1を追加して、再度署名します。 URLスキームを介して新しいアプリにコールバックします
  • 新しいアプリはナンスを検証し、機能のロックを解除します

このスキームは、事前共有キーを使用して簡単に実装できます。もちろん、これは刑務所で壊れたデバイスの弱点ですが、アプリ内レシートを保存するすべてのアプリにはこれらの問題があります。

2