209 lines
8.0 KiB
C#
209 lines
8.0 KiB
C#
/*******************************************************************************
|
||
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;
|
||
}
|
||
} |