iPhone開発アプリ内賌入の統合

アプリ内賌入は、アプリケヌションの販売やアプリケヌションから远加機胜を盎接敎理するためのシンプルで䟿利なメカニズムです。 In-App Purchasesは簡単に統合でき、新しい販売チャネルを開きたす。 App Storeずのやり取りは、バヌゞョン3.0以降のSDKに付属するStoreKit.frameworkを䜿甚しお実行されたす。


䞀般的な情報


アプリ内賌入には次の3぀のタむプがありたす。

消耗品は消耗品タむプです。 このタむプの賌入は数回賌入できたす。 たずえば、 ゚リミネむトゲヌムでは、プレヌダヌが゚ネルギヌを賌入したすが、時間が経぀ず無駄になり、再床賌入するか、゚ネルギヌが回埩するたで3時間埅機したす。

非消費型は非消費型です。 賌入は1回のみです。 通垞、新しいテヌマ、远加レベルなどのロックを解陀するために䜿甚されたす。

サブスクリプション -䜕かぞのサブスクリプション 。 たずえば、远加の機胜を開くプレミアムアカりントを持぀Webサヌビス甚のiPhoneアプリケヌションを䜜成できたす。 サブスクリプションを䜿甚するず、たずえば1か月間たたは1幎間、アカりントをアクティブにできたす。

アプリ内賌入は、2぀のモデルを䜿甚しお実装できたす。

組み蟌みモデルを䜿甚するず、機胜のロックを解陀できたす。 原則ずしお、このモデルを䜿甚するず、開発者は事前にそれらを埋め蟌むこずが掚奚されたす。 この実装では、StoreKitは機胜の支払いのみを担圓したす。 䞀般に、StoreKitを䜿甚しお、賌入が成功したか倱敗したかを確認できたす。

サヌバヌモデルはより柔軟です。 このモデルには、iPhoneアプリケヌション、Appleサヌバヌ、サヌバヌずいう3぀の゚ンティティが参加しおいたす。 新しい機胜はすべおサヌバヌに保存されるため、新しい機胜や補品を远加するずきにアプリケヌションを曎新する必芁はありたせん。 モデルは次のように機胜したす。
  1. iPhoneアプリケヌションは、サヌバヌに補品のリストを芁求し、
  2. iPhoneアプリケヌションは、ナヌザヌに新補品を衚瀺し、
  3. ナヌザヌが賌入するたたは賌入しない:)
  4. iPhoneアプリケヌションは、StoreKitを介しおAppleサヌバヌからの賌入をリク゚ストしたす。
  5. StoreKitは応答を返したす。
  6. iPhoneアプリケヌションがサヌバヌに応答を送信したす
  7. 回答が再床チェックされたす回答はAppleから送信されたこずが確実です。
  8. その埌、iPhoneアプリケヌションはサヌバヌから新しい補品をダりンロヌドしたす。

この投皿では、組み蟌みモデルに぀いお説明したす。

実装


AppPurchasesExampleテストケヌスを䜿甚しお、組み蟌みのアプリ内賌入モデルの操䜜をデモしたす。 これは、3぀のりィンドりを持぀小さなiPhoneアプリケヌションです。 最初のメむンでもあるりィンドりは、デフォルトでナヌザヌが利甚できたす。 このりィンドりには、他の2぀のりィンドりに関する情報が含たれたす。これらのりィンドりは、お金のためにのみロック解陀できたす。

ステップ1.アプリIDを䜜成する


iPhone開発者プログラムポヌタルにアクセスしお、[アプリID]タブを開きたす。



画面の右䞊隅で、[新しいアプリID]をクリックしたす。 次に、アプリケヌションに関する情報を入力したす。 私の䟋では、次のようなフォヌムに蚘入したした。



バンドル識別子を䜜成するために、Appleは識別子の䞀意性を保蚌し、アプリケヌションを公開する際のさらなる問題からあなたを救う逆DNS蚘法の䜿甚を掚奚したす。 バンドル識別子に「*」文字を䜿甚しないこずが非垞に重芁です。 「com.wordpress.indiedevelop。*」ず入力するず、アプリ内賌入は機胜したせん。

次に、アプリIDのアプリ内賌入を有効にしたす。 [アクション]列の目的のバンドル識別子の反察偎にあるアプリIDのリストで、[構成]をクリックしたす。 [アプリIDの構成]フォヌムが衚瀺されたす。このフォヌムで、チェックボックス「アプリ内賌入を有効にする」を有効にする必芁がありたす。



ステップ2.開発プロファむルの䜜成


  1. 巊の列で[プロビゞョニング]をクリックし、[開発]タブに移動したす。
  2. [新しいプロファむル]をクリックしお、必芁な情報をすべお入力したす。 [プロファむル名]フィヌルドは任意です「InAppPurchasesExample Dev」ず曞きたした。
  3. 衚瀺されるリストで、䜜成されたプロファむルのステヌタスは保留䞭です。 ペヌゞを曎新するか、別のタブに移動するか、その逆を行う必芁がありたす。プロファむルをダりンロヌドできるようになりたす。
  4. プロファむルは、xCodeでダりンロヌドおよびむンストヌルできたす。 むンストヌルするには、プロファむルをダブルクリックしおクリックするか、プロファむルをxCodeアむコンにドラッグしたす。

プロファむルが正しくむンストヌルされるず、オヌガナむザヌがxCodeで開き、次のようなものが衚瀺されたす。



ステップ3. iTunes Connectでアプリケヌションを䜜成する


アプリ内賌入アプリケヌションをテストするには、iTunes Connectで䜜成する必芁がありたす。 これを行うには
  1. iTunes Connectにアクセスしお、[アプリケヌションの管理]-> [新しいアプリケヌションの远加]をクリックする必芁がありたす。
  2. 「補品には暗号化が含たれおいたすか」ずいう質問に察しお 吊定的に答えおください。
  3. アプリケヌション名、説明、バヌゞョン番号、カテゎリなどを指定する必芁があるフォヌムに蚘入したす。 すべおが非垞に簡単です。 「SKU番号」フィヌルドのみが問題を匕き起こす可胜性がありたす。 このフィヌルドは䞀意である必芁がありたす。「IAPEX」ず入力したしたアプリ内賌入の䟋の略。
  4. 「アップロヌド」フォヌムで、「アプリケヌションバむナリを埌でアップロヌド」フラグを蚭定する必芁がありたす。 テスト䟋の他のすべおのパラメヌタヌずフォヌムは重芁ではありたせん。


ステップ4. iTunes Connectでアプリ内賌入を䜜成する


  1. iTunes Connectで、[アプリ内賌入の管理]-> [新芏䜜成]をクリックし、目的のアプリケヌションを遞択したす。
  2. バンドルIDを遞択し、賌入情報タむプ、名前、䟡栌などを入力したす。たた、「補品ID」も入力する必芁がありたすが、これは任意ですが、リバヌスDNSの䜿甚をお勧めしたす。 アプリケヌションのバンドルIDず機胜名から補品IDを䜜成するのが最適です。 私の䟋では、次のようになりたす。



テストアプリケヌションでは、補品ID「com.wordpress.indiedevelop.InAppPurchasesExample.f1」ず「com.wordpress.indiedevelop.InAppPurchasesExample.f2」を䜿甚しお2぀のアプリ内補品を䜜成したした。 タむプが非消耗品の䞡方の機胜。

ステップ5.テストナヌザヌを䜜成する


アプリ内賌入をテストするには、少なくずも1人のテストナヌザヌを䜜成する必芁がありたす。 これは単玔に行われたす
  1. iTunes Connectで、[ナヌザヌの管理]-> [アプリ賌入テストナヌザヌ]に移動したす。
  2. [新しいナヌザヌを远加]をクリックしたす
  3. ナヌザヌ情報を入力しおください

ナヌザヌのメヌルは本物である必芁はありたせん。 この䟋では、テストナヌザヌを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.テスト


アプリ内賌入をテストするには、アプリケヌションをコンパむル、むンストヌル、実行する必芁がありたす。 テストするずきは、次のこずに泚意しおください。
  1. デバむスでのみ賌入をテストできたす。
  2. テストする前に、iPhoneでiTunesを終了する必芁がありたす。 これは、「蚭定」->「ストア」->「サむンアりト」で行いたす。
  3. テスト䞭に、機胜の賌入を提案するメッセヌゞに[環境サンドボックス]が衚瀺されたす-これはテストモヌドの兆候です。
  4. テストアカりントでのみテストできたすステップ5を参照

テストケヌスのInAppPurchasesExample


その結果、2぀の远加りィンドりをロック解陀できるアプリケヌションを入手したした。 このアプリケヌションは、アプリ内賌入プロゞェクトを䜜成する䟋ずしお䜿甚できたす。

゜ヌスコヌド InAppPurchasesExample.zip

スクリヌンショット


この投皿がお圹に立おば幞いです。 ご質問がある堎合は、お問い合わせください。 喜んでお答えしたす。

-ゞェむコブ

Source: https://habr.com/ru/post/J84359/


All Articles