美文网首页
在合适的时机弹出在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