1

我现在有 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");

                  }
              }];
         } 
     }];
4

0 回答 0