2011-10-27 3 views
18

これは私が同様の問題を抱えていますし、MKStoreKitととなしの両方を行うと、同様のメッセージを取得しようとしたが「In app purchases with MKStoreKit failing: “Problem in iTunes connect configuration for product: xxxアプリ内購入で無効な商品IDの問題を解決しましたか?

フォローアップの質問です。

チェックリスト

のおかげで:http://troybrant.net/blog/2010/01/invalid-product-ids/

あなたのApp IDのためのアプリ内購入を有効にしていますか?

YES

はあなたの製品の販売のためにクリアにチェックしましたか?

YES

は、アプリケーションのバイナリを提出(必要に応じて拒否)がありますか?

YES

プロジェクトの.plistファイルバンドルIDは、あなたのアプリケーションIDが一致していますか?

YES

あなたが生成され、新しいアプリケーションIDのための新たなプロビジョニングプロファイルをインストールしましたか?

YES

あなたは、この新しいプロビジョニングプロファイルを使用してコード記号にプロジェクトを設定していますか?

YES

あなたはiPhone OS 3.0以上のために構築されていますか?

はい。 iOS4.2以降。

SKProductRequestの作成時に完全な製品IDを使用していますか?

はい。リバースドメインのない製品IDのみ

あなたの製品をiTunes Connectに追加してから数時間お待ちですか?

はい。 「レビュー待ち」となっており、過去4〜5日間行われています

iTunes Connectで銀行の詳細は有効ですか?

いいえ。これはクライアントプロジェクトで、動作しているかどうかをテストするだけです。それをテストするには銀行の詳細が必要ですか?

編集:これを今変更しました。しかし、なぜ私はサンドボックスをテストするためにこれを行う必要があるのか​​わかりません。

端末からアプリを削除して再インストールしましたか?

YES

は、お使いのデバイスのジェイルブレイクか?

NO


のApp表記は

私はこの表記を使用見てきたいくつかの例が正しいです: com.domain.APP_ID.PRODUCT_TO_BUY

は、しかし、他の人が COMを使用しています。ドメイン.PRODUCT_TO_BUY

正しいですか?

私のコードでは、完全な表記とプロダクトID自体を使用しようとしましたが、「無効なプロダクトID」と同じ問題が発生します。

アプリのバンドル(リリース)を拒否し

開発者は、iTunesの接続であると私は、バンドル「を開発者が拒否」しています。

画像: App developer rejected

審査を待っていますか?

私のアプリ内購入では、私は1製品、自動再生可能なサブスクリプションを持っています。それは販売のためにクリアされます。しかし、「レビュー待ち」であり、緑色に点灯していません。

画像:

waiting for review

私はほとんど4-5日前にこれを作成し、そのはまだ "レビューを待っている" としてフラグを立て??

私のアプリが自動再生可能なサブスクリプションの「レビュー待ち」に影響を与えるかどうかは、「開発者は拒否されましたか?

私はこのアイテムで何も変更していません。

さまざまな記事によると、私はそれを使用するには24-48時間待たなければなりませんか?

しかし、テストで使用するには、これを受け入れるか緑色に点灯するまで待つ必要がありますか?

銀行の詳細

は、私は、これは、クライアントのためのアプリケーションであるため、任意の銀行の詳細に記入していない - 私はそれをテストし続けることができます前に、私は銀行の詳細を入力する必要がありますか?

これらの文書によれば、http://developer.apple.com/library/ios/#technotes/tn2259/_index.html銀行詳細が必要ですか?

アプリを実行する前に、テストアカウントで自分のデバイスにiTunesでログインする必要がありますか?

誰かがこれらの問題を明確にすることができますか?アプリ内購入が「緑色のライト」になるのを待っているかのように簡単かもしれません。

注:これは、MKStoreKitを使用するか、それに続くコードを使用するかに関係なく発生します。

ありがとうございました。

私のコード(これは非MKStoreKit版です)

#define kMySubscriptionFeature @"uk.co.samplewebsite.myappproject.sub1" 

    - (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.title = @"Manage Subscriptions"; 


    if ([SKPaymentQueue canMakePayments]) 
    { 
     // Display a store to the user. 

     //[MKStoreManager sharedManager]; 
     //NSLog(@"purhcasable = %@", [[MKStoreManager sharedManager] purchasableObjectsDescription]); 
     [self requestProUpgradeProductData]; 

    } 
    else 
    { 
     // Warn the user that purchases are disabled. 
     NSString *message = @"In-app purchases are disabled. Please review your settings"; 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alertView show]; 
     [alertView release]; 
    } // end if 
} 


#pragma mark - StoreKit Delegate 

- (void) requestProductData 
{ 
    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:kMySubscriptionFeature]]; 
    request.delegate = self; 
    [request start]; 
} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 
{ 
    NSArray *myProduct = [[NSArray alloc] initWithArray:response.products]; 

    for(SKProduct *item in myProduct) 
    { 

     NSLog(@"Product title: %@" , item.localizedTitle); 
     NSLog(@"Product description: %@" , item.localizedDescription); 
     NSLog(@"Product price: %@" , item.price); 
     NSLog(@"Product id: %@" , item.productIdentifier); 
    } 


    for (NSString *invalidProductId in response.invalidProductIdentifiers) 
    { 
     NSLog(@"Problem in iTunes connect configuration for product: %@" , invalidProductId); 
    } 


    [myProduct release]; 

    // populate UI 
    [request autorelease]; 
} 

編集:

フェールセーフとして、私は念のために、銀行の詳細情報を追加しましたが、なぜこれがだろう、私は表示されません問題を引き起こす。

私は、アプリのリリースバンドルをアップロードして拒否したことを確認しました。アドホックのバンドルではありません。これが何か変わるかどうかは分かりませんが。

答えて

6

私は今それをやったと思います。私はちょうど確かめるためにいくつかのテストを実行するつもりです。

これはまだ受け入れられません。私は別のstorekitフレームワークでいくつかのテストを実行しています。

マイ出力:

2011-10-27 15:17:49.297 My Simple App[7376:707] productsRequest 
2011-10-27 15:17:49.298 My Simple App[7376:707] Product title: Simple subscription 
2011-10-27 15:17:49.299 My Simple App[7376:707] Product description: Subscribe and get the latest content to your iPhone or iPod Touch device 
2011-10-27 15:17:49.299 My Simple App[7376:707] Product price: 2.99 
2011-10-27 15:17:49.300 My Simple App[7376:707] Product id: sub1 

ここに私がやったことです。

  1. 銀行詳細を追加しました。私はまだこれがそれとは関係がないとは思わない。

  2. 注意。アプリのアプリ内購入はまだ「レビュー待ち」ですが、上記の結果が得られました。

  3. 私は置き換え:と

    #define kMySubscriptionFeature @"uk.co.somesite.someapp.sub1"

#define kMySubscriptionFeature @"sub1" 

を、私はそれは大丈夫であるかどうかを確認するためにMKStoreKitとし、他のフレームワークといくつかのテストを実行するつもりです。

私が使用したコードは、セキュリティ上の理由のために編集し、以下の通りです:

.hファイル

// ManageSubscriptionsVC.h 
// This doesn't have visual output, just NSLog at the moment 
// This doesn't use MKStoreKit yet 

#import <UIKit/UIKit.h> 
#import "StoreKit/StoreKit.h" 

#define kMySubscriptionFeature @"sub1" 

/* 
Shared Secret 

A shared secret is a unique code that you should use when you make the 
call to our servers for your In-App Purchase receipts. 
Without a shared secret, you will not be able to test auto-renewable 
In-App Purchase subscriptions in the sandbox mode. 

Also note that you will not be able to make them available 
on the App Store. 

Note: Regardless of what app they are associated with, 
all of your auto-renewable subscriptions will use this 
same shared secret. 
*/ 
#define sharedSecret @"PUTSHAREDSECRETHERE" 


@interface ManageSubscriptionsVC : UIViewController 
<SKProductsRequestDelegate, SKProductsRequestDelegate, SKPaymentTransactionObserver> 
{ 
    SKProduct *proUpgradeProduct; 
    SKProductsRequest *productsRequest; 
} 

- (void)requestProUpgradeProductData; 

@end 

.mファイル

// 
// ManageSubscriptionsVC.m 

#import "ManageSubscriptionsVC.h" 

@implementation ManageSubscriptionsVC 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.title = @"Manage Subscriptions"; 


    if ([SKPaymentQueue canMakePayments]) 
    { 
     // Display a store to the user. 

     //[MKStoreManager sharedManager]; 
     //NSLog(@"purhcasable = %@", [[MKStoreManager sharedManager] purchasableObjectsDescription]); 
     [self requestProUpgradeProductData]; 

    } 
    else 
    { 
     // Warn the user that purchases are disabled. 
     NSString *message = @"In-app purchases are disabled. Please review your settings"; 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alertView show]; 
     [alertView release]; 
    } // end if 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

#pragma mark - StoreKit Delegate 

- (void) requestProductData 
{ 
    NSLog(@"requestProductData"); 
    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:kMySubscriptionFeature]]; 
    request.delegate = self; 
    [request start]; 
} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 
{ 
    NSLog(@"productsRequest"); 

    NSArray *myProduct = [[NSArray alloc] initWithArray:response.products]; 

    for(SKProduct *item in myProduct) 
    { 

     NSLog(@"Product title: %@" , item.localizedTitle); 
     NSLog(@"Product description: %@" , item.localizedDescription); 
     NSLog(@"Product price: %@" , item.price); 
     NSLog(@"Product id: %@" , item.productIdentifier); 


    } 

    /* 
    for(NSString *invalidProduct in response.invalidProductIdentifiers) 
     NSLog(@"Problem in iTunes connect configuration for product: %@", invalidProduct); 
    */ 

    for (NSString *invalidProductId in response.invalidProductIdentifiers) 
    { 
     NSLog(@"Problem in iTunes connect configuration for product: %@" , invalidProductId); 
    } 


    [myProduct release]; 

    // populate UI 
    [request autorelease]; 
} 

#pragma mark - PaymentQueue 

-(void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray *)transactions 
{ 
} 

-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error 
{ 
} 

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
} 

-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 
{ 
} 

#pragma mark - Other 


- (void)requestProUpgradeProductData 
{ 
    NSSet *productIdentifiers = [NSSet setWithObject:kMySubscriptionFeature]; 
    productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers]; 
    productsRequest.delegate = self; 
    [productsRequest start]; 

    // we will release the request object in the delegate callback 
} 





@end 
11

待って、新しいアプリケーションIDの2日後、プロファイルなどがあります。

なぜ完全なcom.iap.isrubbish構文を使用するのですか?あなたの助け

ため

おかげで私は置き換え:SUB1 "@ kMySubscriptionFeatureを定義

はで "uk.co.somesite.someapp.sub1"

@ kMySubscriptionFeatureを定義します"

+0

これは私が必要とした最後のステップでした。ありがとう –

+0

男、あなたは私の一日を作った。私はあなたにビールを借りています:) –

+0

WOW ...私は1週間過ちを探して過ごしました。私は2つのバンドルを削除し、新しいバンドルを作成しました。これを見つけるためにたくさんの研究を行いました。そしてそれは働いた...私はちょうどあなたの両方を抱擁したい。 :D –

1

私はちょうどそれを発見した私は、アプリの購入を作成したときに商品IDと参照名を入れ替えたので、私の場合は間違った文字列を使って商品を見つけようとしていました...見つけにくいです。

1

私はiTunesの接続メッセージで問題が発生し始めたときに、機能が期待どおりに機能していることを確認するため、既存の完全機能のアプリケーションの最新バージョンをアプリ購入でテストしていました。私の問題は、MKStoreKitが私のいろいろなデバイスのキーチェーンに購入の事実を保存していたことです(私は忘れていました)ので、新しいユーザーアカウントを使用していましたが、私のキーチェーンはすでに購入したデバイスを登録していました。 MKStoreManager内の[self removeAllKeychainData]が問題を解決しました。 これは、誰かに迷惑をかけないようにしたいと考えています。

0

私の問題は、実際のリンゴIDを使用してデバイスにログインしていたことです。その後、ログアウトして(iPhone - >設定 - > App Store - > My ID->ログアウト) それから、もう一度デプロイしてください。

ウェブ上のみなさん、ありがとうございます。

関連する問題