Я создаю игру 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
из учетной записи и игрового центра противника, они отличаются.
Кто-нибудь столкнулся с чем-то вроде этого?