Mac OS Lionで利用可能なアプリ内購入の新機能をテストしています。領収書の検証部分で立ち往生しています。サンドボックスに接続していないか、アプリケーションの領収書から送信されないかのように、コードは常にこの部分で失敗します。「exit(173);」としての領収書 動作するはずです。
これらは私のステップです:
1-アプリケーションの明示的なアプリIDを登録します。([メンバーセンター] [1])。
2-ステータスが「アップロードの準備」のアプリIDを持つiTunesにアプリケーションを追加します。
3-アプリ購入製品製品を追加します。
5-テストユーザーを作成します6-アプリ内購入で有効になっているアプリIDを使用するMac署名証明書を作成、ダウンロード、インストールします7-この証明書を使用した開発プロビジョニングプロファイル。([メンバーセンター] [1])。
7-Xcodeオブザーバーにプロビジョニングプロファイルを追加します。
8-Xcodeの[マイターゲット]の[情報]ペインの[バンドル識別子]フィールドに、アプリIDのバンドル識別子の部分を入力します。
9-私の証明書でコードに署名します。
注: Xcodeデバッガーではなく、ファインダーでアプリケーションをテストしています。
アプリケーションコードは次のとおりです。
ヘッダ:
#import <Cocoa/Cocoa.h>
#import <StoreKit/StoreKit.h>
@interface AppDelegate : NSObject <NSApplicationDelegate,SKProductsRequestDelegate,SKPaymentTransactionObserver>
{
NSWindow *window;
IBOutlet NSTextField *label;
IBOutlet NSButton *checkox;
}
@property (assign) IBOutlet NSWindow *window;
-(void)request:(SKRequest *)request didFailWithError:(NSError *)error;
- (void)applicationDidFinishLaunching:(NSNotification *)notification;
-(void)requestUpgradeProductsData;
-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response;
-(IBAction)checkBoxState:(id)sender;
@end
コード:
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
-(void)applicationWillFinishLaunching:(NSNotification *)notification
{
NSLog(@"applicationDidFinishLaunching");
NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL];
if (![[NSFileManager defaultManager] fileExistsAtPath:[receiptURL path]])
{
NSLog(@"no receipt - exit the app with code 173");
exit(173);
}
}
-(void)requestUpgradeProductsData
{
if([SKPaymentQueue canMakePayments])
{
SKProductsRequest *request =[[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObjects:@"com.comany.MyApp.DLC1",@"com.comany.MyApp.DLC2",nil]];
request.delegate = self;
[request start];
}
}
-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
int count = response.products.count;
if(count!=0)
{
NSLog(@"COUNT IS NOT ZERO");
}
else
{
[label setStringValue:@"NO PRODUCT"];
}
}
-(IBAction)checkBoxState:(id)sender
{
[self requestUpgradeProductsData];
}
-(void) request:(SKRequest *)request didFailWithError:(NSError *)error
{
NSLog(error);
}
@end
-私のコードは常に「exit(173);」で終了します。このチェックを削除すると、すべての製品が無効な識別子として取得されます。-そして、サードパーティの証明書でコードに署名すると、アプリストアはログイン情報を要求しますが、開発証明書でコードに署名すると、アプリストアは何もしません。
ありがとう。