• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

Unity3D IOS后台推送

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2019/0427/472.html

 
主要是参照雨松MOMO的教程:Unity3D研讨院之IOS本地音讯通知LocalNotification的运用
= = 之前在网上看的他人的,但是遗忘保存下网址了。 
假如有人晓得请通知我,我加上。 
直接上代码。稍有更改。 
*只能用在ios里面。
 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.InteropServices;
using System;
using UnityEngine.iOS; //引入命名空间
 
public class UnityToIOSManager : MonoBehaviour
{
    static UnityToIOSManager mInstance;
    static long lastTime;
 
    int PushIndex;//推送
    string PushText; //推送信息
 
    private void Awake()
    {
        Screen.sleepTimeout = SleepTimeout.NeverSleep;//游戏运转时制止休眠,游戏在前台时能够坚持屏幕长亮
        if (mInstance == null)
            mInstance = this;
        //先清空本地音讯,然后注册
        UnityEngine.iOS.NotificationServices.RegisterForNotifications(NotificationType.Badge | NotificationType.Alert | NotificationType.Sound);
        CleanNotification();
 
        DontDestroyOnLoad(this);
 
    }
//当有多条推送时,每次进入游戏时改换推送音讯
    private void Push()
    {
        #region 推送常州微信公众平台条目记载
        PushIndex = PlayerPrefs.GetInt("Push");
        PushIndex++;
        if (PushIndex > 4)
            PushIndex = 1;
        PlayerPrefs.SetInt("Push", PushIndex);
        PlayerPrefs.Save();
        PushText = LanguageMananger.GetPushText(PushIndex);
        #endregion
    }
 
    //后台音讯通知
    //本地推送
    public static void NotificationMessage(string message, int hour, bool isRepeatDay)
    {
        int year = System.DateTime.Now.Year;
        int month = System.DateTime.Now.Month;
        int day = System.DateTime.Now.Day;
        System.DateTime newDate = new System.DateTime(year, month, day, hour, 0, 0);
        NotificationMessage(message, newDate, isRepeatDay);
 
    }
    //本地推送 你能够传入一个固定的推送时间
    public static void NotificationMessage(string message, System.DateTime newDate, bool isRepeatDay)
    {
        if (isRepeatDay && newDate <= System.DateTime.Now)
        {
            newDate = newDate.AddDays(1);
        }
        //推送时间需求大于当前时间
        if (newDate > System.DateTime.Now)
        {
            UnityEngine.iOS.LocalNotification localNotification = new UnityEngine.iOS.LocalNotification();
            localNotification.fireDate = newDate;
            localNotification.alertBody = message;
            localNotification.applicationIconBadgeNumber = 1;
            localNotification.hasAction = true;
            if (isRepeatDay)
            {
                //常州微信小程序开发能否每天定期循环
                localNotification.repeatCalendar = UnityEngine.iOS.CalendarIdentifier.ChineseCalendar;
                localNotification.repeatInterval = UnityEngine.iOS.CalendarUnit.Day;
            }
            localNotification.soundName = UnityEngine.iOS.LocalNotification.defaultSoundName;
            UnityEngine.iOS.NotificationServices.ScheduleLocalNotification(localNotification);
        }
    }
 
 
    void OnApplicationPause(bool paused)
    {
        //程序进入后台时
        if (paused)
        {
            Push();
            //每天中午12点推送
            NotificationMessage(PushText, 19, true);
            //10s后发送
            NotificationMessage("10秒后发送",System.DateTime.Now.AddSeconds(10),false);
            //时间戳
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            lastTime = Convert.ToInt64(ts.TotalSeconds);
        }
        else
        {
            //程序从后台进入前台时
            CleanNotification();
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            long nowTime = Convert.ToInt64(ts.TotalSeconds);
            if(nowTime - lastTime > 180)
            {
                //这个是判别程序退出到后台超出多久之后
                //然后停止其他操作,播放广告,或是提示什么的
            }
        }
 
    }
 
    //清空常州网站开发建设一切本地音讯
    void CleanNotification()
    {
        UnityEngine.iOS.LocalNotification l = new UnityEngine.iOS.LocalNotification();
        l.applicationIconBadgeNumber = -1;
        UnityEngine.iOS.NotificationServices.PresentLocalNotificationNow(l);
        Invoke("WaitOneFrameClear",0);
    }
    //延迟一帧执行,不然没法清算
    void WaitOneFrameClear()
    {
        UnityEngine.iOS.NotificationServices.CancelAllLocalNotifications();
        UnityEngine.iOS.NotificationServices.ClearLocalNotifications();
    }
 
}

上篇:上一篇:unity 定时刷新小功用
下篇:下一篇:Unity+IOS GPS后台更新GPS数据