174 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			174 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using System.Collections;
							 | 
						|||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						|||
| 
								 | 
							
								using UnityEngine;
							 | 
						|||
| 
								 | 
							
								using Touka.GameLogic;
							 | 
						|||
| 
								 | 
							
								using System;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/// <summary>
							 | 
						|||
| 
								 | 
							
								/// 本地通知类
							 | 
						|||
| 
								 | 
							
								/// 对应配置在 StaticOtherConfig.cs 文件中修改
							 | 
						|||
| 
								 | 
							
								///
							 | 
						|||
| 
								 | 
							
								/// 1. 打开 StaticOtherConfig里的开关 LocalNotitcifaction_Switch
							 | 
						|||
| 
								 | 
							
								/// 2. 修改对应中英文推送内容即可
							 | 
						|||
| 
								 | 
							
								/// </summary>
							 | 
						|||
| 
								 | 
							
								public class LocalNotificationManager : ToukaSingletonMonoBehaviour<LocalNotificationManager>
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    //private string morrowMsgCN = "敌人越来越厉害了,我需要你的帮助!|||今日奖励已经准备好了,上线领取吧!|||家园在你的管理下能扩大多少版图呢?";
							 | 
						|||
| 
								 | 
							
								    //private string day357MsgCN = "确认过眼神,是今天还没有上线的人|||我们的口号就是开疆扩土搞开发!|||最新玩法已升级,更多挑战等着你!";
							 | 
						|||
| 
								 | 
							
								    //private string day468MsgCN = "快来打造属于你的王国!|||这么精美的场景设定,是梦想中的国度没错了!|||金币收益已经爆满,上线领取一波?";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    //private string morrowMsgEN = "I keep getting beat by enemies. COME HELP!!|||Come and expand your territory|||I can't win this game without your help";
							 | 
						|||
| 
								 | 
							
								    //private string day357MsgEN = "For our homeland, you must defeat the enemy!|||New challenge has been unlocked.|||You are a true warrior who defeated the enemy";
							 | 
						|||
| 
								 | 
							
								    //private string day468MsgEN = "Help me repel the enemy, only you can do it!|||There are too many enemies, what should I do?|||New reward is ready, go online to claim it!";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    private void Awake()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        RegisterLocalNotification();
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public void Init()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    private void OnApplicationFocus(bool isFocus)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        //Debug.Log("isFocus : " + isFocus);
							 | 
						|||
| 
								 | 
							
								        ClearAllLocalNotifications();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        if (!isFocus)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            LocalAddCommonLocalNotifications();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    #region 通知
							 | 
						|||
| 
								 | 
							
								    //通知的发送规则设计为:
							 | 
						|||
| 
								 | 
							
								    //1.第2日的通知:如果玩家在6-22点之间登陆游戏,在第2日的相同登陆时间触发通知。如果玩家在22-6点之间登陆游戏,在第2日的22点触发通知。
							 | 
						|||
| 
								 | 
							
								    //2.第3、5、7日的通知:中午12点触发通知
							 | 
						|||
| 
								 | 
							
								    //3.第4、6、8日的通知:晚上6点触发通知
							 | 
						|||
| 
								 | 
							
								    //
							 | 
						|||
| 
								 | 
							
								    //通知内容配置在MessageTemplate中。
							 | 
						|||
| 
								 | 
							
								    //第2日的通知使用的Key为呢notifi:nextday, 
							 | 
						|||
| 
								 | 
							
								    //第3、5、7日的通知使用的Key为notifi:thirday, 
							 | 
						|||
| 
								 | 
							
								    //第4、6、8日的通知使用的Key为notifi:fourthday
							 | 
						|||
| 
								 | 
							
								    //如果需要配置多条不同的消息随机,那么请使用"|||"来分隔不同的消息
							 | 
						|||
| 
								 | 
							
								    public void LocalAddCommonLocalNotifications()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        DateTime now;
							 | 
						|||
| 
								 | 
							
								        DateTime delay;
							 | 
						|||
| 
								 | 
							
								        now = DateTime.Now;
							 | 
						|||
| 
								 | 
							
								        //当前是早上6点到晚上10点
							 | 
						|||
| 
								 | 
							
								        if (now.Hour >= 6 && now.Hour <= 22)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            //次日同点触发
							 | 
						|||
| 
								 | 
							
								            AddLocalNotification(getRandomString(0), now.AddDays(1));
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        else
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            //次日晚上10点触发
							 | 
						|||
| 
								 | 
							
								            int hourMorrow = StaticOtherConfig.MorrowHourNum;
							 | 
						|||
| 
								 | 
							
								            int minMorrow = StaticOtherConfig.MorrowMinuteNum;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            delay = new DateTime(now.Year, now.Month, now.Day, hourMorrow, minMorrow, 0).AddDays(1);
							 | 
						|||
| 
								 | 
							
								            AddLocalNotification(getRandomString(0), delay);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //第3 ,5, 7天 中午12点触发通知
							 | 
						|||
| 
								 | 
							
								        for (int i = 2; i <= 6; i += 2)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            int hourMorrow = StaticOtherConfig.Day357HourNum;
							 | 
						|||
| 
								 | 
							
								            int minMorrow = StaticOtherConfig.Day357MinuteNum;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            delay = new DateTime(now.Year, now.Month, now.Day, hourMorrow, minMorrow, 0).AddDays(i);
							 | 
						|||
| 
								 | 
							
								            AddLocalNotification(getRandomString(1), delay);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //第 4,6,8 天 下午18点触发通知
							 | 
						|||
| 
								 | 
							
								        for (int i = 3; i <= 7; i += 2)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            int hourMorrow = StaticOtherConfig.Day468HourNum;
							 | 
						|||
| 
								 | 
							
								            int minMorrow = StaticOtherConfig.Day468MinuteNum;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            delay = new DateTime(now.Year, now.Month, now.Day, hourMorrow, minMorrow, 0).AddDays(i);
							 | 
						|||
| 
								 | 
							
								            AddLocalNotification(getRandomString(2), delay);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /// <summary>
							 | 
						|||
| 
								 | 
							
								    /// 从第 N 组推送用于中随机一句
							 | 
						|||
| 
								 | 
							
								    /// </summary>
							 | 
						|||
| 
								 | 
							
								    /// <param name="_indexFlg"> 第几组 </param>
							 | 
						|||
| 
								 | 
							
								    /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								    string getRandomString(int _indexFlg)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        string pushInfo = "";
							 | 
						|||
| 
								 | 
							
								        switch (_indexFlg)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            case 0:
							 | 
						|||
| 
								 | 
							
								                pushInfo = isChinese() ? StaticOtherConfig.MorrowMsgCN : StaticOtherConfig.MorrowMsgEN;
							 | 
						|||
| 
								 | 
							
								                break;
							 | 
						|||
| 
								 | 
							
								            case 1:
							 | 
						|||
| 
								 | 
							
								                pushInfo = isChinese() ? StaticOtherConfig.Day357MsgCN : StaticOtherConfig.Day357MsgEN;
							 | 
						|||
| 
								 | 
							
								                break;
							 | 
						|||
| 
								 | 
							
								            case 2:
							 | 
						|||
| 
								 | 
							
								                pushInfo = isChinese() ? StaticOtherConfig.Day468MsgCN : StaticOtherConfig.Day468MsgEN;
							 | 
						|||
| 
								 | 
							
								                break;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        string[] s = pushInfo.Split(new string[] { "|||" }, StringSplitOptions.None);
							 | 
						|||
| 
								 | 
							
								        return s[UnityEngine.Random.Range(0, s.Length)];
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /// <summary>
							 | 
						|||
| 
								 | 
							
								    /// 是否是中文系统
							 | 
						|||
| 
								 | 
							
								    /// 中文系统显示中文推送
							 | 
						|||
| 
								 | 
							
								    /// </summary>
							 | 
						|||
| 
								 | 
							
								    /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								    private bool isChinese()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        bool tIsCurrentChinese = Application.systemLanguage == SystemLanguage.Chinese || Application.systemLanguage == SystemLanguage.ChineseSimplified || Application.systemLanguage == SystemLanguage.ChineseTraditional;
							 | 
						|||
| 
								 | 
							
								        return tIsCurrentChinese;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /// <summary>
							 | 
						|||
| 
								 | 
							
								    /// 注册本地通知
							 | 
						|||
| 
								 | 
							
								    /// </summary>
							 | 
						|||
| 
								 | 
							
								    private void RegisterLocalNotification()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        Debug.Log("register apns first");
							 | 
						|||
| 
								 | 
							
								#if UNITY_IOS && !NO_SDK
							 | 
						|||
| 
								 | 
							
								        TGTools.Instance.RegisterAPNS();
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /// <summary>
							 | 
						|||
| 
								 | 
							
								    /// 清除全部已注册的本地通知
							 | 
						|||
| 
								 | 
							
								    /// </summary>
							 | 
						|||
| 
								 | 
							
								    private void ClearAllLocalNotifications()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        Debug.Log("Clear all local notifications");
							 | 
						|||
| 
								 | 
							
								#if UNITY_IOS && !NO_SDK
							 | 
						|||
| 
								 | 
							
								        TGTools.Instance.RemoveAllNotification();
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /// <summary>
							 | 
						|||
| 
								 | 
							
								    /// 添加一条本地通知
							 | 
						|||
| 
								 | 
							
								    /// </summary>
							 | 
						|||
| 
								 | 
							
								    /// <param name="_pushInfo"></param>
							 | 
						|||
| 
								 | 
							
								    /// <param name="_time"></param>
							 | 
						|||
| 
								 | 
							
								    private void AddLocalNotification(string _pushInfo, DateTime _time)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        string timeStr = _time.ToString("yyyy-MM-dd HH:mm:ss");
							 | 
						|||
| 
								 | 
							
								        //Debug.Log("AddLocalNotification, time : " + timeStr + " , info : " + _pushInfo);
							 | 
						|||
| 
								 | 
							
								#if UNITY_IOS && !NO_SDK
							 | 
						|||
| 
								 | 
							
								        TGTools.Instance.RegisterNotification(timeStr, _pushInfo, timeStr);
							 | 
						|||
| 
								 | 
							
								#endif
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    #endregion
							 | 
						|||
| 
								 | 
							
								}
							 |