こんにちは、JAGA(ja_gaimopotato)です。
iOSアプリでアプリ内課金をするとなると、いくつかの種類から選ぶ必要があります。
- 非消費型のアイテムの購入(Non-Consumable)
- 消費型のアイテムの購入(Consumable)
- 定期購読への加入(Auto-Renewable Subscriptions,Non-Renewing Subscription)
以上の中から、適したものを選ぶ必要があります。]
定期購読の自動更新と非消費型のアイテムの購入の場合は、Apple IDから復元が可能なのでユーザーは安心できる仕様なのですが、自動更新ではない定期購読と消費型のアイテムは、アプリやサービスサイドで管理しなければ消える仕様となっています。
同じ端末であればアプリを削除しても、キーチェインに保存しておけば復元できるようなので、一応の保護は可能です。
Cocoaの日々: [iOS] Keychain Services とは
さらに消費型のアイテムの状態を同じユーザーの別の端末でも共有する方法を提供したいと考えたときに、以下の手段が考えられます。
- iCloudで共有する。
- ユーザーアカウントを管理するWebサーバを用意して、ログインすることで共有する。
iCloudは、オフにしているユーザーへは対処できないのが残念です。
サーバを用意する方が、汎用的なのですが少し手間がかかります。
※自動更新でない定期購読の場合には、サーバで管理しなければ審査が通らないという話もあるようです。
これは、Parseを利用すると、とても簡単に実現できます。
Parseを使うと、本当に簡単に自分のアプリのユーザーを登録できます。
PFUser *user = [PFUser user];
user.username = @"ユーザー名";
user.password = @"パスワード";
user.email = @"メールアドレス";
[user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
}];
たったこれだけのコードでいいんです。
ユーザーごとにオブジェクトを保存することも一瞬で実装できます。
ですので、消費型のアイテムの状態を共有することも、すぐにできます。
[[PFUser currentUser] setObject:@"アイテムA" forKey:@"アイテムの状態"];
加えて、ユーザーの登録については、とても豊富な機能があります。
たとえば、メールの認証をする必要がある場合は設定をONにするだけでOKです。
仮ユーザーを作っておいて、あとで本登録という流れも簡単に実現できます。
[PFUser enableAutomaticUser];
[PFAnonymousUtils logInWithBlock:^(PFUser *user, NSError *error) {
user.username = @"hoge";
user.password = @"hogexhoge";
user.email = @"hoge@hoge.com";
[user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
}];
}];
他にもFacebookや、Twitterで連携も可能です。
ここまで簡単にバックエンドの環境が整えられるのであれば、アイデアを形にする上でハードルがかなり下がります。
本当に素晴らしいサービスだと思います。