アプリ内購入にRayWunderlichのチュートリアルコードを使用している可能性があります。そこにコードは言います:
- (id)initWithProductIdentifiers:(NSSet *)productIdentifiers {
if ((self = [super init])) {
// Store product identifiers
_productIdentifiers = productIdentifiers;
// Check for previously purchased products
_purchasedProductIdentifiers = [NSMutableSet set];
for (NSString * productIdentifier in _productIdentifiers) {
BOOL productPurchased = [[NSUserDefaults standardUserDefaults] boolForKey:productIdentifier];
if (productPurchased) {
[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; // CHECK THIS
[_purchasedProductIdentifiers addObject:productIdentifier];
NSLog(@"Previously purchased: %@", productIdentifier);
} else {
NSLog(@"Not purchased: %@", productIdentifier);
}
}
ここで、addTransactionObserverが呼び出されるのは、製品がすでに購入されている場合のみであることがわかります。このコード行をifクエリの前に移動すると、目的の結果が得られます。
[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; // MOVE HERE
if (productPurchased) {
[_purchasedProductIdentifiers addObject:productIdentifier];
NSLog(@"Previously purchased: %@", productIdentifier);
} else {
NSLog(@"Not purchased: %@", productIdentifier);
}
failedTransactionメソッドで、を呼び出すことができます
[[NSNotificationCenter defaultCenter] postNotificationName:IAPHelperProductPurchasedNotification object:nil userInfo:nil];
これで、現在のビューで通知によって送信されたnil値を確認できます。