1
我在恢復Mac購買時遇到問題。 我已經設置了iTunes連接應用,應用內購買,測試用戶。我可以買物品。如果我多次購買相同的非消耗品,系統會說它已經購買,我將免費獲得。但是恢復的問題。無法在Mac上恢復購買
下面是代碼:
AppDelegate.h
#import <Cocoa/Cocoa.h>
#import <StoreKit/StoreKit.h>
@interface AppDelegate : NSObject <NSApplicationDelegate, SKProductsRequestDelegate, SKPaymentTransactionObserver>
{
NSArray *m_productIdentifiers;
NSArray* m_products;
}
-(IBAction)Press1:(id)sender;
-(IBAction)Press2:(id)sender;
@property (assign) IBOutlet NSWindow *window;
@end
AppDelegate.m
#import "AppDelegate.h"
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSString *receiptPath = [[[NSBundle mainBundle] appStoreReceiptURL] path];
if (![[NSFileManager defaultManager] fileExistsAtPath:receiptPath])
{
exit(173);
}
NSURL *url = [[NSBundle mainBundle] URLForResource:@"products"
withExtension:@"plist"];
m_productIdentifiers = [NSArray arrayWithContentsOfURL:url];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
}
-(IBAction)Press1:(id)sender
{
[self validateProductIdentifiers:m_productIdentifiers];
return;
}
-(IBAction)Press2:(id)sender
{
[self restorePurchases];
}
- (void)validateProductIdentifiers:(NSArray *)productIdentifiers
{
SKProductsRequest *productsRequest = [[SKProductsRequest alloc]
initWithProductIdentifiers:[NSSet setWithArray:productIdentifiers]];
productsRequest.delegate = self;
[productsRequest start];
}
- (void)productsRequest:(SKProductsRequest *)request
didReceiveResponse:(SKProductsResponse *)response
{
m_products = response.products;
for (NSString *dentifier in response.products)
{
NSLog(@"%@",dentifier);
}
}
- (void)requestDidFinish:(SKRequest *)request
{
NSLog(@"requestDidFinish");
return;
}
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error
{
NSLog(@"request");
return;
}
- (void)restorePurchases
{
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}
- (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 {
NSLog(@"completeTransaction...");
NSLog(@"completeTransaction... %@",transaction.payment.productIdentifier);
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
- (void)restoreTransaction:(SKPaymentTransaction *)transaction {
NSLog(@"restoreTransaction...");
NSLog(@"restoreTransaction... %@",transaction.payment.productIdentifier);
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
- (void)failedTransaction:(SKPaymentTransaction *)transaction {
NSLog(@"failedTransaction...");
if (transaction.error.code != SKErrorPaymentCancelled)
{
NSLog(@"Transaction error: %@", transaction.error.localizedDescription);
}
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
{
NSLog(@"restoreCompletedTransactionsFailedWithError: %@", error);
}
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
NSLog(@"paymentQueueRestoreCompletedTransactionsFinished");
}
@end
按1偉大的工作。我檢索我所有的產品ID。但在激活Press2(Restoring)系統詢問密碼後,調用功能- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
。
控制檯說:
11/27/13 4:19:00.022 PM storeagent: promptResponse: <CKSignInPromptResponse:0x7fdefca0b950 returnCode:1>
11/27/13 4:19:00.552 PM storeagent: LoadCompletedMicroPaymentsOperation: Could not install receipt after fetching completed purchases - Error Domain=ISErrorDomain Code=2 "No receipt." UserInfo=0x7fdefca183f0 {NSLocalizedDescription=No receipt., NSLocalizedFailureReason=receiptAsString was nil}
11/27/13 4:19:00.554 PM ***mac: restoreCompletedTransactionsFailedWithError: Error Domain=SKErrorDomain Code=0 "Unknown Error." UserInfo=0x1001e7190 {NSLocalizedDescription=Unknown Error.}
我已經簽署了與應用分發證書(第三方Mac開發者應用:* **)。 沙箱模式被禁用,但我不認爲它是問題的根源。 我沒有在構建中包含embedded.provisionprofile,但我認爲我現在不需要它。
- 的Xcode 4.6.3 +的Mac OS 10.7.4
- 的Xcode 5.0 +的Mac OS 10.8.4