AuthenticateGameCenter
Authenticate the user using their Game Center ID.
caution
Make sure you've initialized the brainCloud library before authenticating.
| Service | Operation |
|---|---|
| authenticationV2 | AUTHENTICATE |
Method Parameters
| Parameter | Description |
|---|---|
| gameCenterId | The user's Game Center ID — can be the PlayerId, GamePlayerId, or TeamPlayerId from the GKLocalPlayer object |
| forceCreate | Should a new profile be created for this user if the account does not exist? |
| timestamp | The timestamp value returned as part of the identity verification signature fetch from Game Center. Required for modern Game Center verification. |
| publicKeyUrl | The public key URL returned as part of the identity verification signature fetch from Game Center. Required for modern Game Center verification. |
| signature | The raw signature bytes returned from Game Center (via GetSignature()). Required for modern Game Center verification. |
| salt | The raw salt bytes returned from Game Center (via GetSalt()). Required for modern Game Center verification. |
| teamPlayerId | Only required when gameCenterId is set to a value other than TeamPlayerId. |
Usage
http://localhost:3000
- C#
- C++
- Obj-C
- Java
- JavaScript
- Dart
- Roblox
- GDScript
- Cloud Code
- Raw
string gameCenterId = "userGameCenterId"; // PlayerId, GamePlayerId, or TeamPlayerId
bool forceCreate = true;
ulong timestamp = 0; // from GKLocalPlayer identity verification
string publicKeyUrl = ""; // from GKLocalPlayer identity verification
byte[] signature = null; // from GKLocalPlayer GetSignature()
byte[] salt = null; // from GKLocalPlayer GetSalt()
string teamPlayerId = ""; // only if gameCenterId is not TeamPlayerId
_bc.AuthenticationService.AuthenticateGameCenter(
gameCenterId, forceCreate, timestamp, publicKeyUrl,
signature, salt, teamPlayerId,
SuccessCallback, FailureCallback);
const char* gameCenterId = "userGameCenterId"; // playerId, gamePlayerId, or teamPlayerId
bool forceCreate = true;
uint64_t timestamp = 0; // from GKLocalPlayer identity verification
std::string publicKeyUrl = ""; // from GKLocalPlayer identity verification
const uint8_t* signature = NULL; // from GKLocalPlayer GetSignature()
size_t signatureLength = 0;
const uint8_t* salt = NULL; // from GKLocalPlayer GetSalt()
size_t saltLength = 0;
std::string teamPlayerId = ""; // only if gameCenterId is not teamPlayerId
_bc->getAuthenticationService()->authenticateGameCenter(
gameCenterId, forceCreate, timestamp, publicKeyUrl,
signature, signatureLength, salt, saltLength,
teamPlayerId, this);
NSString * gameCenterID = @"userGameCenterId"; // PlayerId, GamePlayerId, or TeamPlayerId
BOOL forceCreate = true;
uint64_t timestamp = 0; // from GKLocalPlayer identity verification
NSString * publicKeyUrl = @""; // from GKLocalPlayer identity verification
NSData * signature = nil; // from GKLocalPlayer GetSignature()
NSData * salt = nil; // from GKLocalPlayer GetSalt()
NSString * teamPlayerId = @""; // only if gameCenterID is not TeamPlayerId
BCCompletionBlock successBlock; // define callback
BCErrorCompletionBlock failureBlock; // define callback
[[_bc authenticationService]
authenticateGameCenter:gameCenterID
forceCreate:forceCreate
timestamp:timestamp
publicKeyUrl:publicKeyUrl
signature:signature
salt:salt
teamPlayerId:teamPlayerId
completionBlock:successBlock
errorCompletionBlock:failureBlock
cbObject:nil];
String gameCenterId = "userGameCenterId"; // PlayerId, GamePlayerId, or TeamPlayerId
boolean forceCreate = true;
long timestamp = 0; // from GKLocalPlayer identity verification
String publicKeyUrl = ""; // from GKLocalPlayer identity verification
byte[] signature = null; // from GKLocalPlayer GetSignature()
byte[] salt = null; // from GKLocalPlayer GetSalt()
String teamPlayerId = ""; // only if gameCenterId is not TeamPlayerId
this; // implements IServerCallback
_bc.getAuthenticationService().authenticateGameCenter(gameCenterId, forceCreate, timestamp, publicKeyUrl, signature, salt, teamPlayerId, this);
public void serverCallback(ServiceName serviceName, ServiceOperation serviceOperation, JSONObject jsonData)
{
System.out.print(String.format("Success | %s", jsonData.toString()));
}
public void serverError(ServiceName serviceName, ServiceOperation serviceOperation, int statusCode, int reasonCode, String jsonError)
{
System.out.print(String.format("Failed | %d %d %s", statusCode, reasonCode, jsonError.toString()));
}
var gameCenterID = "userGameCenterId"; // playerId, gamePlayerId, or teamPlayerId
var forceCreate = true;
var timestamp = 0; // from GKLocalPlayer identity verification
var publicKeyUrl = ""; // from GKLocalPlayer identity verification
var signature = null; // from GKLocalPlayer GetSignature()
var salt = null; // from GKLocalPlayer GetSalt()
var teamPlayerId = ""; // only if gameCenterID is not teamPlayerId
_bc.authentication.authenticateGameCenter(
gameCenterID, forceCreate, timestamp, publicKeyUrl,
signature, salt, teamPlayerId, result =>
{
var status = result.status;
console.log(status + " : " + JSON.stringify(result, null, 2));
});
var gameCenterID = "userGameCenterId"; // playerId, gamePlayerId, or teamPlayerId
var forceCreate = true;
int timestamp = 0; // from GKLocalPlayer identity verification
String publicKeyUrl = ""; // from GKLocalPlayer identity verification
List<int>? signature = null; // from GKLocalPlayer GetSignature()
List<int>? salt = null; // from GKLocalPlayer GetSalt()
String teamPlayerId = ""; // only if gameCenterId is not teamPlayerId
ServerResponse result = await _bc.authenticationService.authenticateGameCenter(
gameCenterID: gameCenterID,
forceCreate: forceCreate,
timestamp: timestamp,
publicKeyUrl: publicKeyUrl,
signature: signature,
salt: salt,
teamPlayerId: teamPlayerId);
if (result.statusCode == 200) {
print("Success");
} else {
print("Failed ${result.error['status_message'] ?? result.error}");
}
local gameCenterID = "userGameCenterId" -- playerId, gamePlayerId, or teamPlayerId
local forceCreate = true
local timestamp = 0 -- from GKLocalPlayer identity verification
local publicKeyUrl = "" -- from GKLocalPlayer identity verification
local signature = nil -- from GKLocalPlayer GetSignature()
local salt = nil -- from GKLocalPlayer GetSalt()
local teamPlayerId = "" -- only if gameCenterID is not teamPlayerId
local callback = function(result)
if result.statusCode == 200 then
print("Success")
else
print("Failed | " .. tostring(result.status))
end
end
_bc:getAuthenticationService():authenticateGameCenter(
gameCenterID, forceCreate, timestamp, publicKeyUrl,
signature, salt, teamPlayerId, callback)
var game_center_id = "userGameCenterId"
var force_create = true
var timestamp = 0
var public_key_url = ""
var team_player_id = ""
var result = await _bc.authentication_service.authenticate_game_center(game_center_id, force_create)
if result.status == 200:
print("Success")
else:
print("Failed: %s" % result.status_message)
// N/A
// N/A
JSON Response
{
"data": {
"vcPurchased": 0,
"experiencePoints": 100,
"refundCount": 0,
"playerSessionExpiry": 60,
"server_time": 1464621990155,
"experienceLevel": 0,
"currency": {
"credits": {
"purchased": 0,
"balance": 12211,
"consumed": 133,
"awarded": 12344
}
},
"abTestingId": 8,
"statistics": {
"gamesWon": 0
},
"id": "323e861-b749-4ce4-a57a-175232e21b5d",
"createdAt": 1459439058035,
"profileId": "323e861-b749-4ce4-a57a-175232e21b5d",
"newUser": "false",
"xpCapped": false,
"sent_events": [],
"timeZoneOffset": -5,
"playerName": "",
"vcClaimed": 0,
"parentProfileId": null,
"rewards": {
"rewardDetails": {},
"rewards": {},
"currency": {}
},
"countryCode": "ca",
"loginCount": 16,
"emailAddress": "test@email.com",
"previousLogin": 1464621979514,
"incoming_events": [],
"lastLogin": 1464621990118,
"languageCode": "en",
"pictureUrl": null,
"sessionId": "v3grtg3ve0a089pekk8lneuk8k",
"amountSpent": 0
},
"status": 200
}
Common Error Code
Status Codes
| Code | Name | Description |
|---|---|---|
| 40206 | MISSING_IDENTITY_ERROR | The identity does not exist on the server and forceCreate was false [and a profileId was provided - otherwise 40208 would have been returned]. Will also occur when forceCreate is true and a saved [but un-associated] profileId is provided. The error handler should reset the stored profile id (if there is one) and re-authenticate, setting forceCreate to true to create a new account. A common cause of this error is deleting the user's account via the design portal. |
| 40207 | SWITCHING_PROFILES | Indicates that the identity credentials are valid, and the saved profileId is valid, but the identity is not associated with the provided profileId. This may indicate that the user wants to switch accounts in the app. Often an app will pop-up a dialog confirming that the user wants to switch accounts, and then reset the stored profileId and call authenticate again. |
| 40208 | MISSING_PROFILE_ERROR | Returned when the identity cannot be located, no profileId is provided, and forceCreate is false. The normal response is to call Authenticate again with forceCreate set to true. |
| 40217 | UNKNOWN_AUTH_ERROR | An unknown error has occurred during authentication. |
| 40307 | TOKEN_DOES_NOT_MATCH_USER | The user credentials are invalid (i.e. bad gameCenterId) |