195 lines
4.7 KiB
C#
195 lines
4.7 KiB
C#
// ***********************************************************************
|
||
// Company :
|
||
// Author : Kimch
|
||
// Created :
|
||
//
|
||
// Last Modified By : Kimch
|
||
// Last Modified On :
|
||
// ***********************************************************************
|
||
using System;
|
||
using System.Collections;
|
||
using UnityEngine;
|
||
|
||
#if UNITY_EDITOR
|
||
#elif UNITY_IOS
|
||
//using Unity.Notifications.iOS;
|
||
#elif UNITY_ANDROID
|
||
using Unity.Notifications.Android;
|
||
#endif
|
||
|
||
/// <summary>
|
||
/// KNotification
|
||
/// </summary>
|
||
public class KNotification : MonoBehaviour
|
||
{
|
||
#if UNITY_ANDROID || UNITY_IOS
|
||
#region FIELD
|
||
|
||
private const string CHANNEL_ID = "channel_id_ltb";
|
||
private const string CHANNEL_NAME = "Default Channel";
|
||
private const string CHANNEL_DESCRIPTION = "Generic notifications";
|
||
|
||
#pragma warning disable CS0414 // 字段“KNotification._isFirst”已被赋值,但从未使用过它的值
|
||
private bool _isFirst;
|
||
#pragma warning restore CS0414 // 字段“KNotification._isFirst”已被赋值,但从未使用过它的值
|
||
private DateTime _firstDate;
|
||
|
||
#endregion
|
||
|
||
#region PROPERTY
|
||
|
||
#endregion
|
||
|
||
#region METHOD
|
||
|
||
private void CancelAllLocal()
|
||
{
|
||
#if UNITY_EDITOR
|
||
#elif UNITY_IOS
|
||
UnityEngine.iOS.NotificationServices.CancelAllLocalNotifications();
|
||
UnityEngine.iOS.NotificationServices.ClearLocalNotifications();
|
||
#elif UNITY_ANDROID
|
||
AndroidNotificationCenter.CancelAllNotifications();
|
||
#endif
|
||
}
|
||
|
||
private void PushLocal(string title, string alertBody, DateTime fireDate)
|
||
{
|
||
#if UNITY_EDITOR
|
||
#elif UNITY_IOS
|
||
var local = new UnityEngine.iOS.LocalNotification
|
||
{
|
||
fireDate = fireDate,
|
||
alertBody = alertBody,
|
||
soundName = UnityEngine.iOS.LocalNotification.defaultSoundName
|
||
};
|
||
UnityEngine.iOS.NotificationServices.ScheduleLocalNotification(local);
|
||
#elif UNITY_ANDROID
|
||
var notification = new AndroidNotification
|
||
{
|
||
Title = title,
|
||
Text = alertBody,
|
||
FireTime = fireDate
|
||
};
|
||
notification.LargeIcon = "icon_0";
|
||
notification.SmallIcon = "icon_1";
|
||
|
||
AndroidNotificationCenter.SendNotification(notification, CHANNEL_ID);
|
||
#endif
|
||
}
|
||
|
||
private void RegisterLocal()
|
||
{
|
||
#if UNITY_EDITOR
|
||
#elif UNITY_IOS
|
||
UnityEngine.iOS.NotificationServices.RegisterForNotifications(
|
||
UnityEngine.iOS.NotificationType.Alert |
|
||
UnityEngine.iOS.NotificationType.Badge |
|
||
UnityEngine.iOS.NotificationType.Sound);
|
||
#elif UNITY_ANDROID
|
||
|
||
var channel = new AndroidNotificationChannel()
|
||
{
|
||
Id = CHANNEL_ID,
|
||
Name = CHANNEL_NAME,
|
||
Importance = Importance.Default,
|
||
Description = CHANNEL_DESCRIPTION,
|
||
};
|
||
AndroidNotificationCenter.RegisterNotificationChannel(channel);
|
||
|
||
void receivedNotificationHandler(AndroidNotificationIntentData data)
|
||
{
|
||
var msg = "Notification received : " + data.Id + "\n";
|
||
msg += "\n Notification received: ";
|
||
msg += "\n .Title: " + data.Notification.Title;
|
||
msg += "\n .Body: " + data.Notification.Text;
|
||
msg += "\n .Channel: " + data.Channel;
|
||
Debug.Log(msg);
|
||
}
|
||
AndroidNotificationCenter.OnNotificationReceived += receivedNotificationHandler;
|
||
#endif
|
||
}
|
||
|
||
private void OnEnterGame()
|
||
{
|
||
CancelAllLocal();
|
||
}
|
||
|
||
private void OnQuitGame()
|
||
{
|
||
var today = System.DateTime.Today;
|
||
|
||
var days = (today - _firstDate).TotalDays;
|
||
if (days < 1)
|
||
{
|
||
//var bodys = new string[] { "体力已满,上来拯救江湖吧." };
|
||
//PushLocal("少侠李太白", bodys[UnityEngine.Random.Range(0, bodys.Length)], G.PlayerProxy.Instance.energyRecoverDateTime);
|
||
}
|
||
else if (days < 7)
|
||
{
|
||
var bodys = new string[] { "望少侠速来,江湖危在旦夕,需要你来拯救." };
|
||
PushLocal("少侠李太白", bodys[UnityEngine.Random.Range(0, bodys.Length)], today.AddDays(1).AddHours(12));
|
||
}
|
||
else
|
||
{
|
||
var bodys = new string[] { "望少侠速来,江湖危在旦夕,需要你来拯救." };
|
||
PushLocal("少侠李太白", bodys[UnityEngine.Random.Range(0, bodys.Length)], today.AddDays(1).AddHours(18));
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region UNITY
|
||
|
||
/// <summary>Starts this instance.</summary>
|
||
private IEnumerator Start()
|
||
{
|
||
var firstInstall = PlayerPrefs.GetString("first_install");
|
||
if (string.IsNullOrEmpty(firstInstall))
|
||
{
|
||
_firstDate = DateTime.Today.Date;
|
||
PlayerPrefs.SetString("first_install", _firstDate.ToShortDateString());
|
||
PlayerPrefs.Save();
|
||
_isFirst = true;
|
||
}
|
||
else
|
||
{
|
||
if (DateTime.TryParse(firstInstall, out DateTime tmpFD))
|
||
{
|
||
_firstDate = tmpFD;
|
||
}
|
||
else
|
||
{
|
||
_firstDate = DateTime.Today.Date;
|
||
PlayerPrefs.SetString("first_install", _firstDate.ToShortDateString());
|
||
PlayerPrefs.Save();
|
||
}
|
||
}
|
||
|
||
RegisterLocal();
|
||
|
||
yield return null;
|
||
OnEnterGame();
|
||
}
|
||
|
||
private void OnDisable()
|
||
{
|
||
OnQuitGame();
|
||
}
|
||
|
||
private void OnApplicationPause(bool pause)
|
||
{
|
||
if (pause)
|
||
{
|
||
OnQuitGame();
|
||
}
|
||
else
|
||
{
|
||
OnEnterGame();
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
#endif
|
||
}
|