我现在有 2 个应用程序 - 游戏中心组中的一个免费应用程序和一个付费应用程序。
首先我在 iTunes 中创建了付费应用程序,然后使用com.xxx.yyy
(示例)创建了所有成就标识符
然后我在 iTunes 中创建了免费应用程序并创建了游戏组,并且成就的标识符被更新为grp.com.xxx.yyy
This is ok 并且 iTunes 显示带有标识符的组中的免费和付费应用程序grp.com.xxx.yyy
。
现在,当我尝试使用免费应用报告或加载成就时grp.com.xxx.yyy
,一切正常。所有报告的成就都反映在所有 ios 版本的免费应用程序的游戏中心内
现在,当我报告与付费应用程序相同的成就时,游戏中心显示成功报告并且也在 ios 5 和 ios 6 中得到反映。但它没有反映在 ios7 游戏中心中。当我做一些日志时,我发现付费应用程序正在从游戏中心加载com.xxx.yyy
(旧成就),尽管我报告了grp.com.xxx.yyy
并在付费应用中显示成功报告。即使我得到了错误的报告标识符,它也反映在 ios 5 和 ios 6 成就列表中,但在 ios 7 中它没有反映。并且每次在 ios7 中显示具有相同成就的横幅,因为当我检查是否已经报告了成就时,我从游戏中心获取旧标识符,这就是付费应用程序尝试再次注册相同成就的原因。所有 ios 版本都会发生这种情况,但 ios 7 每次在付费应用实时版本中只显示横幅。而在沙盒中,那条横幅根本就不见了。
有没有人知道这个问题然后帮助我。是否与游戏中心多人游戏兼容性有关?
有些人也有这种问题,你可以在这个论坛
中看到
我也在这里写了代码以供参考,
[GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements, NSError *error)
{
if (error == nil)
{
for (GKAchievement* achievement in achievements)
if (achievement.percentComplete == 100)
{
[achievementsarray addObject: achievement.identifier];
// Getting com.xxx.yyy(wrong/old) for paid app and grp.com.xxx.yyy (right) for free app here
}
}
NSMutableArray *reporttogc = [[[NSMutableArray alloc]init]autorelease];
for (int i = 0; i< [[[results valueForKey:@"Achivement"] valueForKey:@"identifier"] count]; i++) {
GKAchievement *achievement = [[GKAchievement alloc] initWithIdentifier:[NSString stringWithFormat:@"%@",[[[results valueForKey:@"Achivement"]objectAtIndex:i] valueForKey:@"identifier"]]];
// For free and paid both app have passing same identifier here - grp.com.xxx.yyy
achievement.percentComplete = [[[[results valueForKey:@"Achivement"]objectAtIndex:i] valueForKey:@"value"]doubleValue];
achievement.showsCompletionBanner = YES;
if (![achievementsarray containsObject:achievement.identifier])
{
[reporttogc addObject:achievement];
}
[achievement release];
}
if([[[UIDevice currentDevice]systemVersion]intValue]==5)
{
for (GKAchievement* achievement in reporttogc)
{
[self reportAchievementIdentifier:achievement.identifier percentComplete:achievement.percentComplete];
}
}
else if ([[[UIDevice currentDevice]systemVersion]intValue]>=6)
{
[GKAchievement reportAchievements:reporttogc withCompletionHandler:^(NSError *error)
{
if (error != nil)
{
NSLog(@"Error in reporting achievements: %@", error);
}
else
{
NSLog(@"sucess:achievements");
}
}];
}
}];