browser icon
You are using an insecure version of your web browser. Please update your browser!
Using an outdated browser makes your computer unsafe. For a safer, faster, more enjoyable user experience, please update your browser today or try a newer browser.

In-app purchaseで消費型のアイテムを復元する – iPhone開発メモ

logo_iPhone
Posted by on 2013年3月2日

前回の記事「In-app purchaseで既に購入したアイテムをリストアする」続きです。

In-app purchaseで非消費型のアイテムを復元するのは特に問題はありませんが、
消費型のアイテムを復元するのは少し問題があります。

例えば、RPGゲームなどの場合、回復アイテムなど、使ったらなくなるものが消費型アイテムです。
武器や鎧といった装備アイテムや、機能制限解除などの課金コンテンツが非消費型のアイテムです。
もう一つ、定期購読型もありますが、ここでは詳しくは言及しません。

非消費型アイテムに関しては、Apple IDと紐付いていて、別の端末で購入済みのものを新しい端末で再度購入するときに、重複して課金されないようにできます。

ですが、消費型アイテムに関しては、購入された回数は使用した回数をAppleの方で管理する機能は提供されていません。

通常の方法ですと、独自サーバーを準備して、ユーザー毎のチケット枚数を管理しておき、別の端末からログインがあった時にサーバーの情報と照らしあわせて復元しないといけません。

ですが、サーバーを導入する場合、開発費はもちろん、サーバー管理費や維持費で、開発コストが上がってしまうため、サーバーを使うのを避けたいというケースがあります。

サーバーを使わないイレギュラーな方法として、keychainに格納する方法があります。
これは、Apple IDとパスワードが一致していれば同じKey chainを使用するという仕組みを利用した方法です。

すでに、AppleのサイトでWrapper関数が提供されていますので、
これを使えばNSUserDefaultsと同じような感覚で使用することができます。

GenericKeychainのソースコードダウンロードリンク

なお、これを使用するためには、
Security.frameworkをプロジェクトに追加する必要があります。
保存する方法は、下記のようになります。


// Storing the consumable item count

int numItems = 100;
 KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"Items" accessGroup:nil];
 NSString *itemsString = [NSString stringWithFormat:@"%i",numItems];
 [wrapper setObject:itemsString forKey:(id)kSecValueData];
 [wrapper release];
<pre>

 

復元する方法は、下記のようになります。


// Retrieving the consumable item count

KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"Items" accessGroup:nil];
 NSString *numItems = [wrapper objectForKey:(id)kSecValueData];
 [wrapper release];
 int retrievedHints = [numItems intValue];
<pre>

Comments are closed.