ユーザーがアプリのフル バージョンにアップグレードできるように、iOS アプリでアプリ内購入を行っています。ストアを処理するクラスを作成しました。問題は、ストアをテストするときに無効な ProductID エラーが発生することです。問題はアプリストアから製品を取得できないことだと判断しました...
これを修正するにはどうすればよいですか?
コードは次のとおりです。
#import <Foundation/Foundation.h>
#import <StoreKit/StoreKit.h>
@interface PSStoreKitManager : NSObject <SKProductsRequestDelegate,SKPaymentTransactionObserver>
@property (strong, nonatomic) NSArray *products;
-(void)initStore;
-(void)upgradeToFull;
@end
@implementation PSStoreKitManager
@synthesize products = _products;
-(void)initStore {
if ([SKPaymentQueue canMakePayments]) {
[self requestProductData];
}else {
NSLog(@"payments disabbled");
}
NSLog(@"prod id %@",kFullVersionProductId);
}
-(void)upgradeToFull {
SKProduct *fullVersion;
NSLog(@"no items in array products %d",[self.products count]);
for (SKProduct *crt in self.products) {
if ([crt.productIdentifier isEqualToString:kFullVersionProductId]) {
fullVersion = crt;
}
}
SKPayment *payment = [SKPayment paymentWithProduct:fullVersion];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
-(void)requestProductData {
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:kFullVersionProductId]];
[request setDelegate:self];
[request start];
}
-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
self.products = response.products;
NSLog(@"data in response: %d",[response.products count]);
}
#pragma mark -- Transaction observer
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self restoreTransaction:transaction];
default:
break;
}
}
}
- (void) completeTransaction: (SKPaymentTransaction *)transaction
{
// Your application should implement these two methods.
[self recordTransaction:transaction];
[self provideContent:transaction.payment.productIdentifier];
// Remove the transaction from the payment queue.
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
- (void) restoreTransaction: (SKPaymentTransaction *)transaction
{
[self recordTransaction: transaction];
[self provideContent: transaction.originalTransaction.payment.productIdentifier];
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
- (void) failedTransaction: (SKPaymentTransaction *)transaction
{
if (transaction.error.code != SKErrorPaymentCancelled) {
// Optionally, display an error here.
}
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
-(void)recordTransaction:(SKPaymentTransaction *)transaction {
if ([transaction.payment.productIdentifier isEqualToString:kFullVersionProductId]) {
[[NSUserDefaults standardUserDefaults] setValue:transaction.transactionReceipt forKey:kUpgradeToFullReceipt];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}
-(void)provideContent:(NSString *)productId {
if ([productId isEqualToString:kFullVersionProductId]) {
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
[def setBool:YES forKey:kIsUpgradedToFull];
[def synchronize];
}
}
@end
これはアプリデリゲートにあります:
//set up store observer
PSStoreKitManager *observer = [[PSStoreKitManager alloc] init];
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
applicationDidFinishLaunching
これは、ストア オブザーバーとして設定されます。次のように使用されます。
PSStoreKitManager *store = [[PSStoreKitManager alloc] init];
[store initStore];
[store upgradeToFull];
別の質問: itunnes connect にテスト ユーザーを登録すると、そのアドレスに電子メールが送信され、Apple ID でログインして確認するように求められました ... 試してみましたが、「不明な Apple ID」と表示されました ...このメールが未確認の場合はどうなりますか?