1

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);」で終了します。このチェックを削除すると、すべての製品が無効な識別子として取得されます。-そして、サードパーティの証明書でコードに署名すると、アプリストアはログイン情報を要求しますが、開発証明書でコードに署名すると、アプリストアは何もしません。

ありがとう。

https://developer.apple.com/membercenter/index.action

4

1 に答える 1

1

アプリを Finder で起動します。何らかの理由で xcode の外部で起動するわけではありません。

  1. メニューから [製品] -> [アーカイブ] を選択します
  2. アプリを選択し、[配布] を選択します
  3. アプリケーションとしてエクスポートを選択
  4. したがって、エクスポートされたアプリを起動すると、アプリは強制終了し、ログインするとテスト ユーザー アカウントを要求します。アプリは自動的に再起動します。

これでレセプトができ、購入をテストできるようになりました。

于 2012-04-28T06:11:55.080 に答える