Я создаю игру Game Center с GKTurnBasedMatch
совпадениями. У меня возникла проблема, когда свойство readonly
matchData
на GKTurnBasedMatch
не сохраняется должным образом на серверах Game Center.
Я использую этот ответ StackOverflow для создания контрольной суммы md5 на matchData
NSData
как при отправке, так и при получении и от сервера Game Center.
Я записываю контрольную сумму моего объекта игровых данных NSData
, когда отправляю matchData
с помощью метода экземпляра GKTurnBasedMatch
endTurnWithNextParticipants:turnTimeout:matchData:completionHandler:
.
Затем противник извлекает совпадения, используя метод класса loadMatchesWithCompletionHandler:
GKTurnBasedMatch
, и когда совпадения приходят (без ошибок), я снова записываю контрольную сумму.
Две контрольные суммы не совпадают, и полученные данные явно не идентичны на основе реконструированной игры. Я проверил в двух учетных записях, что свойство 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
из учетной записи и устройства Game Center противника, они различаются.
Кто-нибудь сталкивался с подобным?