私は 2 つのアプリを持っています - 現時点ではゲーム センター グループの無料アプリと有料アプリです。
最初にiTunesで有料アプリを作成し、次にcom.xxx.yyy
(例)ですべての実績識別子を作成します
次に、iTunesで無料アプリを作成し、ゲームのグループを作成し、実績の識別子が更新されますgrp.com.xxx.yyy
This is ok and itunes shown free andpaid app in group with identifiers grp.com.xxx.yyy
.
grp.com.xxx.yyy
from free appで実績を報告またはロードしようとすると、すべて正常に動作します。報告されたすべての実績は、すべての 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");
}
}];
}
}];