美文网首页
在合适的时机弹出在AppStore中评分的窗口

在合适的时机弹出在AppStore中评分的窗口

作者: 全新的饭 | 来源:发表于2022-06-13 11:03 被阅读0次

思路

定义一个IosRequestStoreReviewSys类:在想要弹出的时机,进行条件判断,若满足条件则弹出窗口。
外部在游戏开始时,主动调用其静态方法Init即可。

代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 在合适(指检查条件是否满足、且检查后条件满足)的时机,弹出去苹果商店评价的窗口
// 在游戏初始化时调用:IosRequestStoreReviewSys.Init();
public class IosRequestStoreReviewSys
{
    public static IosRequestStoreReviewSys Instance { get; private set; }

    private const string HasRequestedStorageKey = "IosRequestStoreReviewSys" + "HasRequested";

    // 到达合适的
    private float _initiateRequestDelayTime = 1f;
    private Condition _condition;

    public static void Init()
    {
        if (!HasRequested())
        {
            Instance = new IosRequestStoreReviewSys();
        }

        bool HasRequested()
        {
            return PlayerPrefs.GetInt(HasRequestedStorageKey, 0) != 0;
        }
    }

    private IosRequestStoreReviewSys()
    {
        _condition = new Condition();
    }

    private void Destroy()
    {
        _condition?.Destroy();
        _condition = null;
        Instance = null;
    }

    private void 在想要弹出窗口的时机调用,若满足条件,则弹出窗口()
    {
        TryInitiateRequest();
    }

    private void TryInitiateRequest()
    {
        MonoSys.Instance.DelayCall(_initiateRequestDelayTime, InitiateRequest, true);


        bool CanInitiateRequest()
        {
            return _condition.IsSatisfy();
        }
        void Complete()
        {
            PlayerPrefs.SetInt(HasRequestedStorageKey, 1);
        }
        void InitiateRequest()
        {
            if (CanInitiateRequest())
            {
#if UNITY_IOS
                if(Application.platform == RuntimePlatform.IPhonePlayer)
                {
                    UnityEngine.iOS.Device.RequestStoreReview();
                }
#endif
                // Debug.Log("!!弹出:去苹果商店评价的窗口。");
                Complete();
                Destroy();
            }
        }
    }

    // 条件:自己记录一些数据。在外部调用IsSatisfy时,判断条件是否满足。
    private class Condition
    {
        public Condition()
        {
        }

        public void Destroy()
        {
        }

        // 外部调用,在此处判断条件是否满足
        public bool IsSatisfy()
        {
            return true;
        }
    }
}

Unity中,不继承MonoBehaviour的类使用Mono的相关功能

相关文章

网友评论

      本文标题:在合适的时机弹出在AppStore中评分的窗口

      本文链接:https://www.haomeiwen.com/subject/eokomrtx.html