123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- /*******************************************************************************
- 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;
- using SystemInfo = Pico.Platform.Models.SystemInfo;
- namespace Pico.Platform
- {
- /**
- * \ingroup Platform
- *
- * ApplicationService provides functions like launch other application,jump to store, get launch details.
- */
- public static class ApplicationService
- {
- /// <summary>
- /// Launches another app by app package name.
- /// @note If the user does not have that app installed, the user will be directed to the app's download page on the PICO Store.
- /// </summary>
- /// <param name="packageName">The package name of the to-be-launched app.</param>
- /// <param name="options">The options for launching the app. Pass `null` or leave this parameter empty.</param>
- /// <returns>If something goes wrong, a description message will be returned.</returns>
- public static Task<string> LaunchApp(string packageName, ApplicationOptions options = null)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<string>(CLIB.ppf_Application_LaunchOtherApp(packageName, (IntPtr) options));
- }
- /// <summary>
- /// Launches another app by app ID.
- /// @note If the user does not have that app installed, the user will be directed to the app's download page on the PICO Store.
- /// </summary>
- /// <param name="appId">The ID of the to-be-launched app.</param>
- /// <param name="options">The options for launching the app. Pass `null` or leave this parameter empty.</param>
- /// <returns>If something goes wrong, a description message will be returned.</returns>
- public static Task<string> LaunchAppByAppId(string appId, ApplicationOptions options = null)
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<string>(CLIB.ppf_Application_LaunchOtherAppByAppID(appId, (IntPtr) options));
- }
- /// <summary>
- /// Launches the PICO Store app and go to the current app's details page.
- ///
- /// You can direct user to the PICO Store to upgrade the installed app by this
- /// method. To judge whether there is a new version in the PICO Store, you can call
- /// \ref GetVersion.
- ///
- /// @note
- /// * If the current app has never published in the PICO Store, the response error code is non-zero.
- /// * The current app will quit once the PICO Store app is launched.
- ///
- /// </summary>
- /// <returns>A string that describes the launch info.</returns>
- public static Task<string> LaunchStore()
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<string>(CLIB.ppf_Application_LaunchStore());
- }
- /// <summary>
- /// Gets the app's current version info and the latest version info.
- ///
- /// You can compare the current version info and the latest version info, and
- /// then decide whether to call \ref LaunchStore to direct users to the current app's details page to upgrade the app.
- /// </summary>
- /// <returns>The response will contain the latest version info in the PICO Store
- /// and the app's current version info.
- /// </returns>
- public static Task<ApplicationVersion> GetVersion()
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new Task<ApplicationVersion>(CLIB.ppf_Application_GetVersion());
- }
- /// <summary>
- /// Gets the details about an app launch event.
- /// </summary>
- /// <returns>App launch details, including `LaunchResult` and `LaunchType`:
- /// * `LaunchResult`:
- /// * `0`: Unknown
- /// * `1`: Success
- /// * `2`: FailedRoomFull
- /// * `3`: FailedGameAlreadyStarted
- /// * `4`: FailedRoomNotFound
- /// * `5`: FailedUserDeclined
- /// * `6`: FailedOtherReason
- /// * `LaunchType`:
- /// * `0`: Unknown
- /// * `1`: Normal
- /// * `2`: Invite
- /// * `3`: Coordinated
- /// * `4`: Deeplink
- /// </returns>
- public static LaunchDetails GetLaunchDetails()
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new LaunchDetails(CLIB.ppf_ApplicationLifecycle_GetLaunchDetails());
- }
-
- /// <summary>
- /// Gets the device's system information synchronously.
- /// </summary>
- /// <returns>A structure contains the device's system information, including the device's system version, language code,
- /// country/region code, product name, and more.</returns>
- public static SystemInfo GetSystemInfo()
- {
- if (!CoreService.Initialized)
- {
- Debug.LogError(CoreService.NotInitializedError);
- return null;
- }
- return new SystemInfo(CLIB.ppf_Application_GetSystemInfo());
- }
- /// <summary>
- /// Logs whether a user has been successfully directed to the desired destination via a deep link.
- /// </summary>
- /// <param name="trackId">The tracking ID of the app launch event.</param>
- /// <param name="result">The app launch result:
- /// * `0`: Unknown
- /// * `1`: Success
- /// * `2`: FailedRoomFull
- /// * `3`: FailedGameAlreadyStarted
- /// * `4`: FailedRoomNotFound
- /// * `5`: FailedUserDeclined
- /// * `6`: FailedOtherReason
- /// </param>
- public static void LogDeeplinkResult(string trackId, LaunchResult result)
- {
- CLIB.ppf_ApplicationLifecycle_LogDeeplinkResult(trackId, result);
- }
- /// <summary>
- /// When the launch intent is changed, you will receive this notification.
- /// Then you can call \ref GetLaunchDetails to retrieve the launch details.
- /// </summary>
- /// <param name="callback">The callback function.</param>
- public static void SetLaunchIntentChangedCallback(Message<string>.Handler callback)
- {
- Looper.RegisterNotifyHandler(MessageType.Notification_ApplicationLifecycle_LaunchIntentChanged, callback);
- }
- }
- public class ApplicationOptions
- {
- public ApplicationOptions()
- {
- Handle = CLIB.ppf_ApplicationOptions_Create();
- }
- public void SetDeeplinkMessage(string value)
- {
- CLIB.ppf_ApplicationOptions_SetDeeplinkMessage(Handle, value);
- }
- /// For passing to native C
- public static explicit operator IntPtr(ApplicationOptions options)
- {
- return options?.Handle ?? IntPtr.Zero;
- }
- ~ApplicationOptions()
- {
- CLIB.ppf_ApplicationOptions_Destroy(Handle);
- }
- readonly IntPtr Handle;
- }
- }
|