Я создаю игру Game Center с матчами GKTurnBasedMatch. У меня возникла проблема, когда свойство readonly matchData на GKTurnBasedMatch похоже не правильно хранится на серверах Game Center.
Я использую qaru.site/info/297649/... для создания контрольной суммы md5 на matchData NSData, как при отправке, так и при получении в Game Center серверы.
Я отмечаю контрольную сумму моего объекта данных игры NSData, когда я отправляю matchData с помощью метода экземпляра GKTurnBasedMatch endTurnWithNextParticipants:turnTimeout:matchData:completionHandler:.
Затем противник извлекает совпадения с помощью метода GKTurnBasedMatch class loadMatchesWithCompletionHandler:, и когда совпадают совпадения (без ошибок), я снова отмечаю контрольную сумму.
Две контрольные суммы не совпадают, и полученные данные явно не идентичны на основе восстановленной игры. Я проверил в двух учетных записях, что свойство matchID на моих объектах GKTurnBasedMatch идентично.
Я также выполнил следующий тест:
NSLog(@"matchID: %@ matchData checksum: %@",
match.matchID,
[Utilities md5StringFromData:match.matchData]);
// match is a valid `GKTurnBasedMatch` object.
[match endTurnWithNextParticipants: @[ opponent ] // My `GKTurnBasedParticipant` opponent
turnTimeout:600
matchData:data // This is a valid NSData object
completionHandler:^(NSError *error) {
if (nil != error) {
NSLog(@"%@", error);
} else {
NSLog(@"Successfully ended turn.");
[GKTurnBasedMatch loadMatchesWithCompletionHandler:^(NSArray *matches, NSError *error) {
if (nil != error) {
NSLog(@"Error getting matches: %@", [error localizedDescription]);
} else {
for (GKTurnBasedMatch *match in matches) {
NSLog(@"matchID: %@ matchData checksum: %@",
match.matchID,
[Utilities md5StringFromData:match.matchData]);
}
}
}];
}
}];
В этом примере, когда я заканчиваю поворот данными и сразу получаю совпадения из Game Center, данные совпадают. Однако, когда я обращаюсь к matchData из учетной записи и игрового центра противника, они отличаются.
Кто-нибудь столкнулся с чем-то вроде этого?