“还没解决……”
我的 iap 耗材包有问题。问题是当我买一个时,它会重复购买,在没有要求的情况下再做一个。警报视图也出现双倍。
一件奇怪的事情:这个错误只发生在我为我的应用程序制作 ipa 时,而不是在调试它时!我不明白为什么...
这是productPurchase
在我放置 IAP 按钮的主菜单中实现的方法:
- (void)productPurchased:(NSNotification *)notification {
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
NSString * productIdentifier = notification.object;
NSString* plistPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"XXXXX.plist"];
if(plistPath != nil){
int playerSilverCoins = [defaults integerForKey:@"userSilverCoins"];
int playerGoldCoins = [defaults integerForKey:@"userGoldenCoins"];
NSArray *coinsItems = [NSArray arrayWithContentsOfFile:plistPath];
for (NSDictionary *coinItem in coinsItems) {
if ([[coinItem objectForKey:@"productId"] isEqualToString:productIdentifier]) {
playerSilverCoins = playerSilverCoins + [[coinItem objectForKey:@"silverCoins"] integerValue];
playerGoldCoins = playerGoldCoins + [[coinItem objectForKey:@"goldenCoins"] integerValue];
[defaults setInteger:playerSilverCoins forKey:@"userSilverCoins"];
[defaults setInteger:playerGoldCoins forKey:@"userGoldenCoins"];
[defaults synchronize];
NSLog(@"product bought: %@" , productIdentifier);
NSString *message = nil;
if([[coinItem objectForKey:@"goldenCoins"] integerValue] == 0)
message = [NSString stringWithFormat:@"You have bought %d silver coins", [[coinItem objectForKey:@"silverCoins"] integerValue]];
else
message = [NSString stringWithFormat:@"You have bought %d golden coins and %d silver coins", [[coinItem objectForKey:@"goldenCoins"] integerValue],[[coinItem objectForKey:@"silverCoins"] integerValue]];
UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"XXXXX" message:message delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
[alert release];
NSNumber* achievementContributor = [defaults objectForKey:@"AchievementContributor"];
if ([achievementContributor intValue] != 1 ) {
[[GameCenterAchievement sharedGameCenterAchievement] checkAchievements:_kContributor];
[defaults setObject:[NSNumber numberWithInt:1] forKey:@"AchievementContributor"];
[[GKAchievementHandler defaultHandler] notifyAchievementTitle:@"Contributor"
andMessage:@"Buy a coin pack"];
}
break;
}
}
}
}
我不知道那里是否存在问题,或者在我实现事务、恢复等的 IAP 类上是否存在问题。如果有人需要更多代码,请索取。谢谢!