ã¢ããªå
賌å
¥ã¯ãã¢ããªã±ãŒã·ã§ã³ã®è²©å£²ãã¢ããªã±ãŒã·ã§ã³ããè¿œå æ©èœãçŽæ¥æŽçããããã®ã·ã³ãã«ã§äŸ¿å©ãªã¡ã«ããºã ã§ãã In-App Purchasesã¯ç°¡åã«çµ±åã§ããæ°ãã販売ãã£ãã«ãéããŸãã App Storeãšã®ããåãã¯ãããŒãžã§ã³3.0以éã®SDKã«ä»å±ããStoreKit.frameworkã䜿çšããŠå®è¡ãããŸãã
äžè¬çãªæ
å ±
ã¢ããªå
賌å
¥ã«ã¯æ¬¡ã®3ã€ã®ã¿ã€ãããããŸãã
- æ¶èå
- éæ¶èå
- ãµãã¹ã¯ãªãã·ã§ã³
æ¶èåã¯æ¶èåã¿ã€ãã§ãã ãã®ã¿ã€ãã®è³Œå
¥ã¯æ°å賌å
¥ã§ããŸãã ããšãã°ã
ãšãªããã€ãã²ãŒã ã§ã¯ããã¬ãŒã€ãŒããšãã«ã®ãŒã賌å
¥ããŸãããæéãçµã€ãšç¡é§ã«ãªããå床賌å
¥ãããããšãã«ã®ãŒãå埩ãããŸã§3æéåŸ
æ©ããŸãã
éæ¶è²»åã¯éæ¶è²»åã§ãã 賌å
¥ã¯1åã®ã¿ã§ãã éåžžãæ°ããããŒããè¿œå ã¬ãã«ãªã©ã®ããã¯ã解é€ããããã«äœ¿çšãããŸãã
ãµãã¹ã¯ãªãã·ã§ã³ -äœããžã®
ãµãã¹ã¯ãªãã·ã§ã³ ã ããšãã°ãè¿œå ã®æ©èœãéããã¬ãã¢ã ã¢ã«ãŠã³ããæã€WebãµãŒãã¹çšã®iPhoneã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã ãµãã¹ã¯ãªãã·ã§ã³ã䜿çšãããšãããšãã°1ãæéãŸãã¯1幎éãã¢ã«ãŠã³ããã¢ã¯ãã£ãã«ã§ããŸãã
ã¢ããªå
賌å
¥ã¯ã2ã€ã®ã¢ãã«ã䜿çšããŠå®è£
ã§ããŸãã
- çµã¿èŸŒã¿ã¢ãã«
- ãµãŒããŒã¢ãã«
çµã¿èŸŒã¿ã¢ãã«ã䜿çšãããšãæ©èœã®ããã¯ã解é€ã§ããŸãã ååãšããŠããã®ã¢ãã«ã䜿çšãããšãéçºè
ã¯äºåã«ããããåã蟌ãããšãæšå¥šãããŸãã ãã®å®è£
ã§ã¯ãStoreKitã¯æ©èœã®æ¯æãã®ã¿ãæ
åœããŸãã äžè¬ã«ãStoreKitã䜿çšããŠã賌å
¥ãæåããã倱æãããã確èªã§ããŸãã
ãµãŒããŒã¢ãã«ã¯ããæè»ã§ãã ãã®ã¢ãã«ã«ã¯ãiPhoneã¢ããªã±ãŒã·ã§ã³ãAppleãµãŒããŒããµãŒããŒãšãã3ã€ã®ãšã³ãã£ãã£ãåå ããŠããŸãã æ°ããæ©èœã¯ãã¹ãŠãµãŒããŒã«ä¿åããããããæ°ããæ©èœã補åãè¿œå ãããšãã«ã¢ããªã±ãŒã·ã§ã³ãæŽæ°ããå¿
èŠã¯ãããŸããã ã¢ãã«ã¯æ¬¡ã®ããã«æ©èœããŸãã
- iPhoneã¢ããªã±ãŒã·ã§ã³ã¯ããµãŒããŒã«è£œåã®ãªã¹ããèŠæ±ãã
- iPhoneã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒã«æ°è£œåã衚瀺ãã
- ãŠãŒã¶ãŒã賌å
¥ããïŒãŸãã¯è³Œå
¥ããªã:)ïŒ
- iPhoneã¢ããªã±ãŒã·ã§ã³ã¯ãStoreKitãä»ããŠAppleãµãŒããŒããã®è³Œå
¥ããªã¯ãšã¹ãããŸãã
- StoreKitã¯å¿çãè¿ããŸãã
- iPhoneã¢ããªã±ãŒã·ã§ã³ããµãŒããŒã«å¿çãéä¿¡ããŸã
- åçãå床ãã§ãã¯ãããŸãïŒåçã¯Appleããéä¿¡ãããããšã確å®ã§ãïŒã
- ãã®åŸãiPhoneã¢ããªã±ãŒã·ã§ã³ã¯ãµãŒããŒããæ°ãã補åãããŠã³ããŒãããŸãã
ãã®æçš¿ã§ã¯ãçµã¿èŸŒã¿ã¢ãã«ã«ã€ããŠèª¬æããŸãã
å®è£
AppPurchasesExampleãã¹ãã±ãŒã¹ã䜿çšããŠãçµã¿èŸŒã¿ã®ã¢ããªå
賌å
¥ã¢ãã«ã®æäœããã¢ããŸãã ããã¯ã3ã€ã®ãŠã£ã³ããŠãæã€å°ããªiPhoneã¢ããªã±ãŒã·ã§ã³ã§ãã æåã®ïŒã¡ã€ã³ã§ãããïŒãŠã£ã³ããŠã¯ãããã©ã«ãã§ãŠãŒã¶ãŒãå©çšã§ããŸãã ãã®ãŠã£ã³ããŠã«ã¯ãä»ã®2ã€ã®ãŠã£ã³ããŠã«é¢ããæ
å ±ãå«ãŸããŸãããããã®ãŠã£ã³ããŠã¯ããéã®ããã«ã®ã¿ããã¯è§£é€ã§ããŸãã
ã¹ããã1.ã¢ããªIDãäœæãã
iPhoneéçºè
ããã°ã©ã ããŒã¿ã«ã«ã¢ã¯ã»ã¹ããŠã[ã¢ããªID]ã¿ããéããŸãã

ç»é¢ã®å³äžé
ã§ã[æ°ããã¢ããªID]ãã¯ãªãã¯ããŸãã 次ã«ãã¢ããªã±ãŒã·ã§ã³ã«é¢ããæ
å ±ãå
¥åããŸãã ç§ã®äŸã§ã¯ã次ã®ãããªãã©ãŒã ã«èšå
¥ããŸããã

ãã³ãã«èå¥åãäœæããããã«ãAppleã¯èå¥åã®äžææ§ãä¿èšŒããã¢ããªã±ãŒã·ã§ã³ãå
¬éããéã®ãããªãåé¡ããããªããæã
éDNSèšæ³ã®äœ¿çšãæšå¥šããŸãã ãã³ãã«èå¥åã«ã*ãæåã䜿çšããªã
ããšãéåžžã«éèŠã§ãã ãcom.wordpress.indiedevelopã*ããšå
¥åãããšãã¢ããªå
賌å
¥ã¯æ©èœããŸããã
次ã«ãã¢ããªIDã®ã¢ããªå
賌å
¥ãæå¹ã«ããŸãã [ã¢ã¯ã·ã§ã³]åã®ç®çã®ãã³ãã«èå¥åã®å察åŽã«ããã¢ããªIDã®ãªã¹ãã§ã[æ§æ]ãã¯ãªãã¯ããŸãã [ã¢ããªIDã®æ§æ]ãã©ãŒã ã衚瀺ãããŸãããã®ãã©ãŒã ã§ããã§ãã¯ããã¯ã¹ãã¢ããªå
賌å
¥ãæå¹ã«ããããæå¹ã«ããå¿
èŠããããŸãã

ã¹ããã2.éçºãããã¡ã€ã«ã®äœæ
- å·Šã®åã§[ããããžã§ãã³ã°]ãã¯ãªãã¯ãã[éçº]ã¿ãã«ç§»åããŸãã
- [æ°ãããããã¡ã€ã«]ãã¯ãªãã¯ããŠãå¿
èŠãªæ
å ±ããã¹ãŠå
¥åããŸãã [ãããã¡ã€ã«å]ãã£ãŒã«ãã¯ä»»æã§ãïŒãInAppPurchasesExample DevããšæžããŸããïŒã
- 衚瀺ããããªã¹ãã§ãäœæããããããã¡ã€ã«ã®ã¹ããŒã¿ã¹ã¯ä¿çäžã§ãã ããŒãžãæŽæ°ããããå¥ã®ã¿ãã«ç§»åãããããã®éãè¡ãå¿
èŠããããŸãããããã¡ã€ã«ãããŠã³ããŒãã§ããããã«ãªããŸãã
- ãããã¡ã€ã«ã¯ãxCodeã§ããŠã³ããŒãããã³ã€ã³ã¹ããŒã«ã§ããŸãã ã€ã³ã¹ããŒã«ããã«ã¯ããããã¡ã€ã«ãããã«ã¯ãªãã¯ããŠã¯ãªãã¯ãããããããã¡ã€ã«ãxCodeã¢ã€ã³ã³ã«ãã©ãã°ããŸãã
ãããã¡ã€ã«ãæ£ããã€ã³ã¹ããŒã«ããããšããªãŒã¬ãã€ã¶ãŒãxCodeã§éãã次ã®ãããªãã®ã衚瀺ãããŸãã

ã¹ããã3. iTunes Connectã§ã¢ããªã±ãŒã·ã§ã³ãäœæãã
ã¢ããªå
賌å
¥ã¢ããªã±ãŒã·ã§ã³ããã¹ãããã«ã¯ãiTunes Connectã§äœæããå¿
èŠããããŸãã ãããè¡ãã«ã¯ïŒ
- iTunes Connectã«ã¢ã¯ã»ã¹ããŠã[ã¢ããªã±ãŒã·ã§ã³ã®ç®¡ç]-> [æ°ããã¢ããªã±ãŒã·ã§ã³ã®è¿œå ]ãã¯ãªãã¯ããå¿
èŠããããŸãã
- ã補åã«ã¯æå·åãå«ãŸããŠããŸããïŒããšãã質åã«å¯Ÿã㊠åŠå®çã«çããŠãã ããã
- ã¢ããªã±ãŒã·ã§ã³åã説æãããŒãžã§ã³çªå·ãã«ããŽãªãªã©ãæå®ããå¿
èŠããããã©ãŒã ã«èšå
¥ããŸãã ãã¹ãŠãéåžžã«ç°¡åã§ãã ãSKUçªå·ããã£ãŒã«ãã®ã¿ãåé¡ãåŒãèµ·ããå¯èœæ§ããããŸãã ãã®ãã£ãŒã«ãã¯äžæã§ããå¿
èŠããããŸãããIAPEXããšå
¥åããŸããïŒã¢ããªå
賌å
¥ã®äŸã®ç¥ïŒã
- ãã¢ããããŒãããã©ãŒã ã§ããã¢ããªã±ãŒã·ã§ã³ãã€ããªãåŸã§ã¢ããããŒãããã©ã°ãèšå®ããå¿
èŠããããŸãã ãã¹ãäŸã®ä»ã®ãã¹ãŠã®ãã©ã¡ãŒã¿ãŒãšãã©ãŒã ã¯éèŠã§ã¯ãããŸããã
ã¹ããã4. iTunes Connectã§ã¢ããªå
賌å
¥ãäœæãã
- iTunes Connectã§ã[ã¢ããªå
賌å
¥ã®ç®¡ç]-> [æ°èŠäœæ]ãã¯ãªãã¯ããç®çã®ã¢ããªã±ãŒã·ã§ã³ãéžæããŸãã
- ãã³ãã«IDãéžæãã賌å
¥æ
å ±ïŒã¿ã€ããååãäŸ¡æ Œãªã©ïŒãå
¥åããŸãããŸããã補åIDããå
¥åããå¿
èŠããããŸãããããã¯ä»»æã§ããããªããŒã¹DNSã®äœ¿çšããå§ãããŸãã ã¢ããªã±ãŒã·ã§ã³ã®ãã³ãã«IDãšæ©èœåãã補åIDãäœæããã®ãæé©ã§ãã ç§ã®äŸã§ã¯ã次ã®ããã«ãªããŸãã

ãã¹ãã¢ããªã±ãŒã·ã§ã³ã§ã¯ã補åIDãcom.wordpress.indiedevelop.InAppPurchasesExample.f1ããšãcom.wordpress.indiedevelop.InAppPurchasesExample.f2ãã䜿çšããŠ2ã€ã®ã¢ããªå
補åãäœæããŸããã ã¿ã€ããéæ¶èåã®äž¡æ¹ã®æ©èœã
ã¹ããã5.ãã¹ããŠãŒã¶ãŒãäœæãã
ã¢ããªå
賌å
¥ããã¹ãããã«ã¯ãå°ãªããšã1人ã®ãã¹ããŠãŒã¶ãŒãäœæããå¿
èŠããããŸãã ããã¯åçŽã«è¡ãããŸãïŒ
- iTunes Connectã§ã[ãŠãŒã¶ãŒã®ç®¡ç]-> [ã¢ããªè³Œå
¥ãã¹ããŠãŒã¶ãŒ]ã«ç§»åããŸãã
- [æ°ãããŠãŒã¶ãŒãè¿œå ]ãã¯ãªãã¯ããŸã
- ãŠãŒã¶ãŒæ
å ±ãå
¥åããŠãã ãã
ãŠãŒã¶ãŒã®ã¡ãŒã«ã¯æ¬ç©ã§ããå¿
èŠã¯ãããŸããã ãã®äŸã§ã¯ããã¹ããŠãŒã¶ãŒã1人äœæããŸããã
éèŠãªãã€ã³ãã Appleãšã®å¥çŽãå®äºããŠããªãå ŽåãIn-App Purchaseã¯æ©èœããŸããã å¥çŽãå®äºããã«ã¯ãé£çµ¡å
æ
å ±ãéè¡æ
å ±ãçšåæ
å ±ãæå®ããå¿
èŠããããŸãã
ã¹ããã6.ããã°ã©ãã³ã°
ç§ã®ãã¹ãã±ãŒã¹ã§ã¯ããããžã§ã¯ããã¬ãŒã ã¯ãŒã¯ãšãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãäœæããŸããã

App Storeã§äœæ¥ããã«ã¯ã2009幎ã«éçºè
KumarïŒMugunth KumarïŒã«ãã£ãŠéçºããã
MKStoreKitã䜿çšããããšããå§ãããŸãã ãã®ã¯ã©ã¹ã®ã»ããã¯ãStoreKitã§ã®äœæ¥ã倧å¹
ã«ä¿é²ããŸãã MKStoreKitã«å ããŠãStoreKit.frameworkããããžã§ã¯ãã«è¿œå ããå¿
èŠããããŸãã
ãã®äŸã§ã¯ããããã«è¿ä»£åãããæåã®MKStoreKitéã¿ä»ãã䜿çšããŸãã 䟿å®äžã次ã®ãã©ãŒã ã®ããªã²ãŒããMKStoreManagerã¯ã©ã¹ã«è¿œå ããŸããã
@protocol MKStoreKitDelegate @optional
- ( void )productAPurchased;
- ( void )productBPurchased;
- ( void )failed;
@end
* This source code was highlighted with Source Code Highlighter .
productAPurchasedã¡ãã»ãŒãžã¯ãæ©èœ1ã賌å
¥ããããšããªã²ãŒãã«éä¿¡ãããproductBPurchased-æ©èœ2ã賌å
¥ãããŠå€±æãããš-ãŠãŒã¶ãŒã賌å
¥ããã£ã³ã»ã«ãããã賌å
¥ã倱æãããšéä¿¡ãããŸãã
ã·ã³ã°ã«ãã³ã¯ã©ã¹MKStoreManagerã¯ãMKStoreKitã®ã¡ã€ã³ã¯ã©ã¹ã§ãã ããã¯åœŒã®åºåãã©ã®ããã«èŠãããã§ãïŒ
@ interface MKStoreManager : NSObject<SKProductsRequestDelegate> {
...
}
//
@property (nonatomic, retain) id<MKStoreKitDelegate> delegate ;
// ,
@property (nonatomic, retain) NSMutableArray *purchasableObjects;
// Singleton
+ (MKStoreManager*)sharedManager;
//
- ( void ) buyFeatureA;
- ( void ) buyFeatureB;
//
+ (BOOL) featureAPurchased;
+ (BOOL) featureBPurchased;
...
@end
* This source code was highlighted with Source Code Highlighter .
ç§ã®ãã¹ãã±ãŒã¹ã§ã¯ã©ã¹ã䜿çšããããšãæ€èšããŠãã ããã
ãŸããMKStoreManager.mãã¡ã€ã«ã§ãæ©èœã®è£œåIDãç»é²ããŸããã
static NSString *featureAId = @"com.wordpress.indiedevelop.InAppPurchasesExample.f1" ;
static NSString *featureBId = @"com.wordpress.indiedevelop.InAppPurchasesExample.f2" ;
* This source code was highlighted with Source Code Highlighter .
ãŸããããã°ã©ã ã®æ©èœã賌å
¥ããããã©ããã確èªããå¿
èŠããããŸãã äŸã®ã¡ã€ã³ã¯ã©ã¹ã¯UIViewControllerããç¶æ¿ããããããviewDidLoadã¡ãœããã«æ€èšŒã³ãŒããåã蟌ãããšããå§ãããŸãã
- ( void )viewDidLoad {
[super viewDidLoad];
[MKStoreManager sharedManager]. delegate = self; // MKStoreManager
if ([MKStoreManager featureAPurchased]) // 1
{
feature1Button.hidden = YES; // ' 1'
seeFeature1Button.hidden = NO; // ' 1'
}
if ([MKStoreManager featureBPurchased]) // 2
{
feature2Button.hidden = YES; // ' 2'
seeFeature2Button.hidden = NO; // ' 2'
}
}
* This source code was highlighted with Source Code Highlighter .
MKStoreKitå
ã§ã¯ã補åã賌å
¥ããããã©ããã«é¢ããæ
å ±ã¯NSUserDefaultsãä»ããŠä¿åããããããã¢ããªã±ãŒã·ã§ã³ãã¢ã³ã€ã³ã¹ããŒã«ãããšãæ
å ±ããªã»ãããããŸãã ãã ããStoreKitã¯æ©èœãžã®ã¢ã¯ã»ã¹ãç¡æã§éãããããŠãŒã¶ãŒã¯æ©èœã2å賌å
¥ããããšã¯ãããŸããã
次ã«ãã賌å
¥ãã¡ãœãããå®è£
ããå¿
èŠããããŸãã ãããã¯ã察å¿ãããã¿ã³ã®TouchUpInsideã€ãã³ãã«é¢é£ä»ããããŠããŸãã
-(IBAction)feature1ButtonPressed
{
[self showLockView]; // ,
[[MKStoreManager sharedManager] buyFeatureA]; // ' 1'
}
-(IBAction)feature2ButtonPressed
{
[self showLockView]; // ,
[[MKStoreManager sharedManager] buyFeatureB]; // ' 2'
}
* This source code was highlighted with Source Code Highlighter .
次ã«ãMKStoreKitDelegateããªã²ãŒãã¡ãœãããå®è£
ããŸããã
// 1
- ( void )productAPurchased
{
[self hideLockView]; //
feature1Button.hidden = YES; // ''
seeFeature1Button.hidden = NO; // ''
}
// 2
- ( void )productBPurchased
{
[self hideLockView]; //
feature2Button.hidden = YES; // ''
seeFeature2Button.hidden = NO; // ''
}
// ,
- ( void )failed
{
[self hideLockView]; //
}
* This source code was highlighted with Source Code Highlighter .
æ°ããæ©èœã¯ãUIViewControllerã®å¶åŸ¡äžã§åå¥ã®UIViewãšããŠå®è£
ãããŸãã UINavigationControllerã䜿çšããŠãæ°ããæ©èœãžã®ç§»è¡ãå®è£
ããŸããã
// 1
-(IBAction)seeFeature1
{
[self.navigationController pushViewController:feature1ViewController animated:YES];
}
// 2
-(IBAction)seeFeature2
{
[self.navigationController pushViewController:feature2ViewController animated:YES];
}
* This source code was highlighted with Source Code Highlighter .
ãŸããã¹ãã¢ãæäœãããšãã«ããã®å¯çšæ§ã®ãã§ãã¯ãè¿œå ã§ããŸãã ããã¯æ¬¡ã®ããã«è¡ãããŸãã
if ([SKPaymentQueue canMakePayments])
{
... //
}
else
{
... // , Purchases
}
* This source code was highlighted with Source Code Highlighter .
ã芧ã®ãšããããã¹ãŠãéåžžã«ç°¡åã§ãã ã³ããŒããŠãã¹ãããŸã:)
ã¹ããã7.ãã¹ã
ã¢ããªå
賌å
¥ããã¹ãããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ãã€ã³ã¹ããŒã«ãå®è¡ããå¿
èŠããããŸãã ãã¹ããããšãã¯ã次ã®ããšã«æ³šæããŠãã ããã
- ããã€ã¹ã§ã®ã¿è³Œå
¥ããã¹ãã§ããŸãã
- ãã¹ãããåã«ãiPhoneã§iTunesãçµäºããå¿
èŠããããŸãã ããã¯ããèšå®ã->ãã¹ãã¢ã->ããµã€ã³ã¢ãŠããã§è¡ããŸãã
- ãã¹ãäžã«ãæ©èœã®è³Œå
¥ãææ¡ããã¡ãã»ãŒãžã«[ç°å¢ïŒãµã³ãããã¯ã¹]ã衚瀺ãããŸã-ããã¯ãã¹ãã¢ãŒãã®å
åã§ãã
- ãã¹ãã¢ã«ãŠã³ãã§ã®ã¿ãã¹ãã§ããŸãïŒã¹ããã5ãåç
§ïŒ
ãã¹ãã±ãŒã¹ã®InAppPurchasesExample
ãã®çµæã2ã€ã®è¿œå ãŠã£ã³ããŠãããã¯è§£é€ã§ããã¢ããªã±ãŒã·ã§ã³ãå
¥æããŸããã ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã¢ããªå
賌å
¥ãããžã§ã¯ããäœæããäŸãšããŠäœ¿çšã§ããŸãã
ãœãŒã¹ã³ãŒãïŒ
InAppPurchasesExample.zipã¹ã¯ãªãŒã³ã·ã§ããïŒ

ãã®æçš¿ãã圹ã«ç«ãŠã°å¹žãã§ãã ã質åãããå Žåã¯ããåãåãããã ããã åãã§ãçãããŸãã
-ãžã§ã€ã³ã