äžè¬çãªæ å ±
ã¢ããªå è³Œå ¥ã«ã¯æ¬¡ã®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
ã¹ã¯ãªãŒã³ã·ã§ããïŒ

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