123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414 |
- // <copyright file="IPlayGamesClient.cs" company="Google Inc.">
- // Copyright (C) 2014 Google Inc. All Rights Reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- // </copyright>
- #if UNITY_ANDROID
- namespace GooglePlayGames.BasicApi
- {
- using System;
- using UnityEngine.SocialPlatforms;
- /// <summary>
- /// Defines an abstract interface for a Play Games Client.
- /// </summary>
- /// <remarks>Concrete implementations
- /// might be, for example, the client for Android or for iOS. One fundamental concept
- /// that implementors of this class must adhere to is stable authentication state.
- /// This means that once Authenticate() returns true through its callback, the user is
- /// considered to be forever after authenticated while the app is running. The implementation
- /// must make sure that this is the case -- for example, it must try to silently
- /// re-authenticate the user if authentication is lost or wait for the authentication
- /// process to get fixed if it is temporarily in a bad state (such as when the
- /// Activity in Android has just been brought to the foreground and the connection to
- /// the Games services hasn't yet been established). To the user of this
- /// interface, once the user is authenticated, they're forever authenticated.
- /// Unless, of course, there is an unusual permanent failure such as the underlying
- /// service dying, in which it's acceptable that API method calls will fail.
- ///
- /// <para>All methods can be called from the game thread. The user of this interface
- /// DOES NOT NEED to call them from the UI thread of the game. Transferring to the UI
- /// thread when necessary is a responsibility of the implementors of this interface.</para>
- ///
- /// <para>CALLBACKS: all callbacks must be invoked in Unity's main thread.
- /// Implementors of this interface must guarantee that (suggestion: use
- /// <see cref="PlayGamesHelperObject.RunOnGameThread(System.Action)"/>).</para>
- /// </remarks>
- public interface IPlayGamesClient
- {
- /// <summary>
- /// Starts the authentication process.
- /// </summary>
- /// <remarks>If silent == true, no UIs will be shown
- /// (if UIs are needed, it will fail rather than show them). If silent == false,
- /// this may show UIs, consent dialogs, etc.
- /// At the end of the process, callback will be invoked to notify of the result.
- /// Once the callback returns true, the user is considered to be authenticated
- /// forever after.
- /// </remarks>
- /// <param name="silent">If set to <c>true</c> silent.</param>
- /// <param name="callback">Callback</param>
- void Authenticate(bool silent, Action<SignInStatus> callback);
- /// <summary>
- /// Returns whether or not user is authenticated.
- /// </summary>
- /// <returns><c>true</c> if the user is authenticated; otherwise, <c>false</c>.</returns>
- bool IsAuthenticated();
- /// <summary>
- /// Signs the user out.
- /// </summary>
- void SignOut();
- /// <summary>
- /// Returns the authenticated user's ID. Note that this value may change if a user signs
- /// on and signs in with a different account.
- /// </summary>
- /// <returns>The user's ID, <code>null</code> if the user is not logged in.</returns>
- string GetUserId();
- /// <summary>
- /// Loads friends of the authenticated user. This loads the entire list of friends.
- /// </summary>
- /// <param name="callback">Callback invoked when complete. bool argument
- /// indicates success.</param>
- void LoadFriends(Action<bool> callback);
- /// <summary>
- /// Returns a human readable name for the user, if they are logged in.
- /// </summary>
- /// <returns>The user's human-readable name. <code>null</code> if they are not logged
- /// in</returns>
- string GetUserDisplayName();
- /// <summary>
- /// Returns an id token, which can be verified server side, if they are logged in.
- /// </summary>
- string GetIdToken();
- /// <summary>
- /// The server auth code for this client.
- /// </summary>
- /// <remarks>
- /// Note: This function is currently only implemented for Android.
- /// </remarks>
- string GetServerAuthCode();
- /// <summary>
- /// Gets another server auth code.
- /// </summary>
- /// <remarks>This method should be called after authenticating, and exchanging
- /// the initial server auth code for a token. This is implemented by signing in
- /// silently, which if successful returns almost immediately and with a new
- /// server auth code.
- /// </remarks>
- /// <param name="reAuthenticateIfNeeded">Calls Authenticate if needed when
- /// retrieving another auth code. </param>
- /// <param name="callback">Callback returning the auth code, or null if there
- /// was a problem. NOTE: This callback can be called immediately.</param>
- void GetAnotherServerAuthCode(bool reAuthenticateIfNeeded,
- Action<string> callback);
- /// <summary>
- /// Gets the user's email.
- /// </summary>
- /// <remarks>The email address returned is selected by the user from the accounts present
- /// on the device. There is no guarantee this uniquely identifies the player.
- /// For unique identification use the id property of the local player.
- /// The user can also choose to not select any email address, meaning it is not
- /// available.
- /// </remarks>
- /// <returns>The user email or null if not authenticated or the permission is
- /// not available.</returns>
- string GetUserEmail();
- /// <summary>
- /// Returns the user's avatar url, if they are logged in and have an avatar.
- /// </summary>
- /// <returns>The URL to load the avatar image. <code>null</code> if they are not logged
- /// in</returns>
- string GetUserImageUrl();
- /// <summary>Gets the player stats.</summary>
- /// <param name="callback">Callback for response.</param>
- void GetPlayerStats(Action<CommonStatusCodes, PlayerStats> callback);
- /// <summary>
- /// Loads the users specified. This is mainly used by the leaderboard
- /// APIs to get the information of a high scorer.
- /// </summary>
- /// <param name="userIds">User identifiers.</param>
- /// <param name="callback">Callback.</param>
- void LoadUsers(string[] userIds, Action<IUserProfile[]> callback);
- /// <summary>
- /// Loads the achievements for the current signed in user and invokes
- /// the callback.
- /// </summary>
- void LoadAchievements(Action<Achievement[]> callback);
- /// <summary>
- /// Unlocks the achievement with the passed identifier.
- /// </summary>
- /// <remarks>If the operation succeeds, the callback
- /// will be invoked on the game thread with <code>true</code>. If the operation fails, the
- /// callback will be invoked with <code>false</code>. This operation will immediately fail if
- /// the user is not authenticated (i.e. the callback will immediately be invoked with
- /// <code>false</code>). If the achievement is already unlocked, this call will
- /// succeed immediately.
- /// </remarks>
- /// <param name="achievementId">The ID of the achievement to unlock.</param>
- /// <param name="successOrFailureCalllback">Callback used to indicate whether the operation
- /// succeeded or failed.</param>
- void UnlockAchievement(string achievementId, Action<bool> successOrFailureCalllback);
- /// <summary>
- /// Reveals the achievement with the passed identifier.
- /// </summary>
- /// <remarks>If the operation succeeds, the callback
- /// will be invoked on the game thread with <code>true</code>. If the operation fails, the
- /// callback will be invoked with <code>false</code>. This operation will immediately fail if
- /// the user is not authenticated (i.e. the callback will immediately be invoked with
- /// <code>false</code>). If the achievement is already in a revealed state, this call will
- /// succeed immediately.
- /// </remarks>
- /// <param name="achievementId">The ID of the achievement to reveal.</param>
- /// <param name="successOrFailureCalllback">Callback used to indicate whether the operation
- /// succeeded or failed.</param>
- void RevealAchievement(string achievementId, Action<bool> successOrFailureCalllback);
- /// <summary>
- /// Increments the achievement with the passed identifier.
- /// </summary>
- /// <remarks>If the operation succeeds, the
- /// callback will be invoked on the game thread with <code>true</code>. If the operation fails,
- /// the callback will be invoked with <code>false</code>. This operation will immediately fail
- /// if the user is not authenticated (i.e. the callback will immediately be invoked with
- /// <code>false</code>).
- /// </remarks>
- /// <param name="achievementId">The ID of the achievement to increment.</param>
- /// <param name="steps">The number of steps to increment by.</param>
- /// <param name="successOrFailureCalllback">Callback used to indicate whether the operation
- /// succeeded or failed.</param>
- void IncrementAchievement(string achievementId, int steps,
- Action<bool> successOrFailureCalllback);
- /// <summary>
- /// Set an achievement to have at least the given number of steps completed.
- /// </summary>
- /// <remarks>
- /// Calling this method while the achievement already has more steps than
- /// the provided value is a no-op. Once the achievement reaches the
- /// maximum number of steps, the achievement is automatically unlocked,
- /// and any further mutation operations are ignored.
- /// </remarks>
- /// <param name="achId">Ach identifier.</param>
- /// <param name="steps">Steps.</param>
- /// <param name="callback">Callback.</param>
- void SetStepsAtLeast(string achId, int steps, Action<bool> callback);
- /// <summary>
- /// Shows the appropriate platform-specific achievements UI.
- /// <param name="callback">The callback to invoke when complete. If null,
- /// no callback is called. </param>
- /// </summary>
- void ShowAchievementsUI(Action<UIStatus> callback);
- /// <summary>
- /// Shows the appropriate platform-specific friends sharing UI.
- /// <param name="callback">The callback to invoke when complete. If null,
- /// no callback is called. </param>
- /// </summary>
- void AskForLoadFriendsResolution(Action<UIStatus> callback);
- /// <summary>
- /// Returns the latest LoadFriendsStatus obtained from loading friends.
- /// </summary>
- LoadFriendsStatus GetLastLoadFriendsStatus();
- /// <summary>
- /// Shows the Play Games Player Profile UI for a specific user identifier.
- /// </summary>
- /// <param name="otherUserId">User Identifier.</param>
- /// <param name="otherPlayerInGameName">
- /// The game's own display name of the player referred to by userId.
- /// </param>
- /// <param name="currentPlayerInGameName">
- /// The game's own display name of the current player.
- /// </param>
- /// <param name="callback">Callback invoked upon completion.</param>
- void ShowCompareProfileWithAlternativeNameHintsUI(
- string otherUserId, string otherPlayerInGameName, string currentPlayerInGameName,
- Action<UIStatus> callback);
- /// <summary>
- /// Returns if the user has allowed permission for the game to access the friends list.
- /// </summary>
- /// <param name="forceReload">If true, this call will clear any locally cached data and
- /// attempt to fetch the latest data from the server. Normally, this should be set to {@code
- /// false} to gain advantages of data caching.</param> <param name="callback">Callback
- /// invoked upon completion.</param>
- void GetFriendsListVisibility(bool forceReload,
- Action<FriendsListVisibilityStatus> callback);
- /// <summary>
- /// Loads the first page of the user's friends
- /// </summary>
- /// <param name="pageSize">
- /// The number of entries to request for this initial page. Note that if cached
- /// data already exists, the returned buffer may contain more than this size, but it is
- /// guaranteed to contain at least this many if the collection contains enough records.
- /// </param>
- /// <param name="forceReload">
- /// If true, this call will clear any locally cached data and attempt to
- /// fetch the latest data from the server. This would commonly be used for something like a
- /// user-initiated refresh. Normally, this should be set to {@code false} to gain advantages
- /// of data caching.</param>
- /// <param name="callback">Callback invoked upon completion.</param>
- void LoadFriends(int pageSize, bool forceReload, Action<LoadFriendsStatus> callback);
- /// <summary>
- /// Loads the friends list page
- /// </summary>
- /// <param name="pageSize">
- /// The number of entries to request for this page. Note that if cached data already
- /// exists, the returned buffer may contain more than this size, but it is guaranteed
- /// to contain at least this many if the collection contains enough records.
- /// </param>
- /// <param name="callback"></param>
- void LoadMoreFriends(int pageSize, Action<LoadFriendsStatus> callback);
- /// <summary>
- /// Shows the leaderboard UI for a specific leaderboard.
- /// </summary>
- /// <remarks>If the passed ID is <code>null</code>, all leaderboards are displayed.
- /// </remarks>
- /// <param name="leaderboardId">The leaderboard to display. <code>null</code> to display
- /// all.</param>
- /// <param name="span">Timespan to display for the leaderboard</param>
- /// <param name="callback">If non-null, the callback to invoke when the
- /// leaderboard is dismissed.
- /// </param>
- void ShowLeaderboardUI(string leaderboardId,
- LeaderboardTimeSpan span,
- Action<UIStatus> callback);
- /// <summary>
- /// Loads the score data for the given leaderboard.
- /// </summary>
- /// <param name="leaderboardId">Leaderboard identifier.</param>
- /// <param name="start">Start indicating the top scores or player centric</param>
- /// <param name="rowCount">max number of scores to return. non-positive indicates
- /// no rows should be returned. This causes only the summary info to
- /// be loaded. This can be limited
- /// by the SDK.</param>
- /// <param name="collection">leaderboard collection: public or social</param>
- /// <param name="timeSpan">leaderboard timespan</param>
- /// <param name="callback">callback with the scores, and a page token.
- /// The token can be used to load next/prev pages.</param>
- void LoadScores(string leaderboardId, LeaderboardStart start,
- int rowCount, LeaderboardCollection collection,
- LeaderboardTimeSpan timeSpan,
- Action<LeaderboardScoreData> callback);
- /// <summary>
- /// Loads the more scores for the leaderboard.
- /// </summary>
- /// <remarks>The token is accessed
- /// by calling LoadScores() with a positive row count.
- /// </remarks>
- /// <param name="token">Token for tracking the score loading.</param>
- /// <param name="rowCount">max number of scores to return.
- /// This can be limited by the SDK.</param>
- /// <param name="callback">Callback.</param>
- void LoadMoreScores(ScorePageToken token, int rowCount,
- Action<LeaderboardScoreData> callback);
- /// <summary>
- /// Returns the max number of scores returned per call.
- /// </summary>
- /// <returns>The max results.</returns>
- int LeaderboardMaxResults();
- /// <summary>
- /// Submits the passed score to the passed leaderboard.
- /// </summary>
- /// <remarks>This operation will immediately fail
- /// if the user is not authenticated (i.e. the callback will immediately be invoked with
- /// <code>false</code>).
- /// </remarks>
- /// <param name="leaderboardId">Leaderboard identifier.</param>
- /// <param name="score">Score.</param>
- /// <param name="successOrFailureCalllback">Callback used to indicate whether the operation
- /// succeeded or failed.</param>
- void SubmitScore(string leaderboardId, long score,
- Action<bool> successOrFailureCalllback);
- /// <summary>
- /// Submits the score for the currently signed-in player.
- /// </summary>
- /// <param name="score">Score.</param>
- /// <param name="leaderboardId">leaderboard id.</param>
- /// <param name="metadata">metadata about the score.</param>
- /// <param name="successOrFailureCalllback">Callback upon completion.</param>
- void SubmitScore(string leaderboardId, long score, string metadata,
- Action<bool> successOrFailureCalllback);
- /// <summary>
- /// Asks user to give permissions for the given scopes.
- /// </summary>
- /// <param name="scopes">list of scopes to ask permission for</param>
- /// <param name="callback">Callback used to indicate the outcome of the operation.</param>
- void RequestPermissions(string[] scopes, Action<SignInStatus> callback);
- /// <summary>
- /// Returns whether or not user has given permissions for given scopes
- /// </summary>
- /// <seealso cref="GooglePlayGames.BasicApi.IPlayGamesClient.HasPermissions"/>
- /// <param name="scopes">list of scopes</param>
- /// <returns><c>true</c>, if given, <c>false</c> otherwise.</returns>
- bool HasPermissions(string[] scopes);
- /// <summary>
- /// Gets the saved game client.
- /// </summary>
- /// <returns>The saved game client.</returns>
- SavedGame.ISavedGameClient GetSavedGameClient();
- /// <summary>
- /// Gets the events client.
- /// </summary>
- /// <returns>The events client.</returns>
- Events.IEventsClient GetEventsClient();
- /// <summary>
- /// Gets the video client.
- /// </summary>
- /// <returns>The video client.</returns>
- Video.IVideoClient GetVideoClient();
- IUserProfile[] GetFriends();
- /// <summary>
- /// Sets the gravity for popups (Android only).
- /// </summary>
- /// <remarks>This can only be called after authentication. It affects
- /// popups for achievements and other game services elements.</remarks>
- /// <param name="gravity">Gravity for the popup.</param>
- void SetGravityForPopups(Gravity gravity);
- }
- }
- #endif
|