123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- /*******************************************************************************
- Copyright © 2015-2022 PICO Technology Co., Ltd.All rights reserved.
- NOTICE:All information contained herein is, and remains the property of
- PICO Technology Co., Ltd. The intellectual and technical concepts
- contained herein are proprietary to PICO Technology Co., Ltd. and may be
- covered by patents, patents in process, and are protected by trade secret or
- copyright law. Dissemination of this information or reproduction of this
- material is strictly forbidden unless prior written permission is obtained from
- PICO Technology Co., Ltd.
- *******************************************************************************/
- using System;
- using Pico.Platform.Models;
- using UnityEngine;
- namespace Pico.Platform
- {
- /**
- * \ingroup Platform
- *
- * Account & Friends service allows developers to access the info of a specified account, get the friends list of the currently logged-in users, send friend requests, and more.
- */
- public static class UserService
- {
- /// <summary>
- /// Returns an access token for this user. Starting from SDK V2.2.0,
- /// the system caches the access token upon the first request, allowing subsequent requests to use the cached token information stored locally.
- /// @note User's permission is required if the user uses this app for the first time.
- /// </summary>
- /// <returns>The access token for the current user.</returns>
- public static Task<string> GetAccessToken()
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<string>(CLIB.ppf_User_GetAccessToken());
- }
- /// <summary>
- /// Gets the organization ID for a specified user.
- /// Different users have different organization IDs.
- /// A user has only one fixed unique organization ID for all the apps created by the same organization.
- ///
- /// </summary>
- /// <param name="userID">The ID of the user. It's the user's openID in the current app.</param>
- /// <returns>The `OrgScopedID` structure that contains the user's organization ID.</returns>
- public static Task<OrgScopedID> GetOrgScopedID(string userID)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<OrgScopedID>(CLIB.ppf_User_GetOrgScopedID(userID));
- }
- /// <summary>
- /// Gets the information about the current logged-in user.
- /// </summary>
- /// <returns>The User structure that contains the details about the user.</returns>
- public static Task<User> GetLoggedInUser()
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<User>(CLIB.ppf_User_GetLoggedInUser());
- }
- /// <summary>
- /// Gets the information about a specified user.
- /// @note The same user has different user IDs for different apps.
- /// </summary>
- /// <param name="userId">The ID of the user.</param>
- /// <returns>The User structure that contains the details about the specified user.</returns>
- public static Task<User> Get(string userId)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<User>(CLIB.ppf_User_Get(userId));
- }
- /// <summary>
- /// Gets the friend list of the current user.
- /// @note Friends who don't use this app won't appear in this list.
- /// </summary>
- /// <returns>The friend list of the current user.</returns>
- public static Task<UserList> GetFriends()
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<UserList>(CLIB.ppf_User_GetLoggedInUserFriends());
- }
- /// <summary>
- /// Gets the relationship between the current user and other users.
- /// </summary>
- /// <param name="userIds">The list of user IDs.
- /// The request queries the current user's relationship with specified users.
- /// A single request can pass no more than 20 user IDs.</param>
- /// <returns>`UserRelationResult` which is a dictionary of user relationships.</returns>
- public static Task<UserRelationResult> GetUserRelations(string[] userIds)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<UserRelationResult>(CLIB.ppf_User_GetRelations(userIds));
- }
- /// <summary>
- /// Launches the flow to apply for friendship with someone.
- /// </summary>
- /// <param name="userId">The ID of the user that the friend request is sent to.</param>
- /// <returns>`LaunchFriendRequest` that indicates whether the request is sent successfully.</returns>
- public static Task<LaunchFriendResult> LaunchFriendRequestFlow(string userId)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<LaunchFriendResult>(CLIB.ppf_User_LaunchFriendRequestFlow(userId));
- }
- /// <summary>
- /// Gets the friends of the logged-in user and the rooms the friends might be in.
- /// </summary>
- /// <returns>`UserRoomList` that contains the friend and room data. If a friend is not in any room, the `room` field will be null.</returns>
- public static Task<UserRoomList> GetFriendsAndRooms()
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<UserRoomList>(CLIB.ppf_User_GetLoggedInUserFriendsAndRooms());
- }
- /// <summary>
- /// Gets the next page of user and room list.
- /// </summary>
- /// <param name="list">The user and room list from the current page.</param>
- /// <returns>The user and room list from the next page.</returns>
- public static Task<UserRoomList> GetNextUserAndRoomListPage(UserRoomList list)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- if (!list.HasNextPage)
- {
- Debug.LogWarning("GetNextUserAndRoomListPage: List has no next page");
- return null;
- }
- if (String.IsNullOrEmpty(list.NextPageParam))
- {
- Debug.LogWarning("GetNextUserAndRoomListPage: list.NextPageParam is empty");
- return null;
- }
- return new Task<UserRoomList>(CLIB.ppf_User_GetNextUserAndRoomArrayPage(list.NextPageParam));
- }
- /// <summary>
- /// Gets the next page of user list.
- /// </summary>
- /// <param name="list">The user list from the current page.</param>
- /// <returns>The user list from the next page.</returns>
- public static Task<UserList> GetNextUserListPage(UserList list)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- if (!list.HasNextPage)
- {
- Debug.LogWarning("GetNextUserListPage: List has no next page");
- return null;
- }
- if (String.IsNullOrEmpty(list.NextPageParam))
- {
- Debug.LogWarning("GetNextUserListPage: list.NextPageParam is empty");
- return null;
- }
- return new Task<UserList>(CLIB.ppf_User_GetNextUserArrayPage(list.NextPageParam));
- }
- /// <summary>
- /// Gets authorized permissions.
- /// </summary>
- /// <returns>
- /// A struct containing the access token and permission list. The `UserID` field is empty so do NOT use it.
- /// </returns>
- public static Task<PermissionResult> GetAuthorizedPermissions()
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<PermissionResult>(CLIB.ppf_User_GetAuthorizedPermissions());
- }
- /// <summary>
- /// Requests user permissions. The user will received a pop-up notification window.
- /// </summary>
- /// <param name="permissionList">The list of permissions to request. You can use constants in \ref Pico.Platform.Models.Permissions.
- /// </param>
- /// <returns>A struct containing the access token and permission list.</returns>
- public static Task<PermissionResult> RequestUserPermissions(params string[] permissionList)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<PermissionResult>(CLIB.ppf_User_RequestUserPermissions(permissionList));
- }
- /// <summary>
- /// Checks whether the current user is entitled to use the current app.
- ///
- /// If the user is not entitled, the system will close the app and show a dialog box to remind the user to buy the app from the PICO Store.
- /// For customizations, you can set param `killApp` to `false` and then customize the dialog.
- /// </summary>
- /// <param name="killApp">Determines whether the system closes the app if the user fails to pass the entitlement check.
- /// The default value is `true`.
- /// </param>
- /// <returns>The entitlement check result.</returns>
- public static Task<EntitlementCheckResult> EntitlementCheck(bool killApp = true)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<EntitlementCheckResult>(CLIB.ppf_User_EntitlementCheck(killApp));
- }
- /// <summary>
- /// Gets the ID token for the current user. The ID token is used for OIDC login.
- /// You can use \ref ApplicationService.GetSystemInfo to determine the region of user's device and then choose the proper OIDC identity provider.
- /// Read the following articles for more information:
- /// * [Unity Service signin with openID connect](https://docs.unity.com/authentication/en/manual/platform-signin-openid-connect)
- /// * [PICO SDK guide](http://developer-global.pico-interactive.com/document/unity/accounts-and-friends/)
- /// @note User's permission is required if the user uses this app for the first time. Call \ref UserService.RequestUserPermissions to request desired permissions in a batch.
- /// </summary>
- /// <returns>The ID token for the current user.</returns>
- public static Task<string> GetIdToken()
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<string>(CLIB.ppf_User_GetIdToken());
- }
- }
- }
|