Unity iOS本地推送踩坑实录

作者: Michaelbest1 | 来源:发表于2017-12-21 19:10 被阅读74次

    昨天实现了一下Unity里iOS推送。踩坑两个。

    1. 要先注册推送才可以

    接收推送前必须调用NotificationServices.RegisterForNotifications()才可以。否则接收不到推送。直接做iOS开发也是要注册才可以的,Unity在设计的时候当然也要遵循iOS的接口啦。

    2. 要设置推送的时区

    在创建LocalNotification对象的时候,需要设置timeZone属性。除非你是在GMT标准时区内(比如大不列颠),否则时间会错误。
    原本以为这个属性应该是个枚举类型,但实际上是个字符串。搜了一下竟然没有找到如何设置这个字符串。原生iOS开发这个是封装过的,但Unity里没有。还好机智的我尝试了一下"GMT+8",没想到一下就成功了。

    最后贴一下代码吧

    首先是一个Singleton:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using iOSNS = UnityEngine.iOS.NotificationServices;
    using iOSLocalNotification = UnityEngine.iOS.LocalNotification;
    
    public class NotificationMgr
    {
        public const int NOTIF_MAX_DAY_NUM = 7;
    
        private static NotificationMgr instance;
    
        private NotificationMgr() {}
    
        public static NotificationMgr GetInstance()
        {
            if (instance == null) {
                instance = new NotificationMgr();
            }
            return instance;
        }
    
        public void FlushPlanNotification()
        {
            if (Application.platform == RuntimePlatform.IPhonePlayer)
                flushPlanNotificationIos();
        }
    
        private void flushPlanNotificationIos()
        {
            iOSNS.ClearLocalNotifications();
            iOSLocalNotification notif = new iOSLocalNotification();
            notif.alertBody = "推送文本";
            notif.fireDate = info.alarmTime;
            notif.timeZone = "GMT+8";
            iOSNS.ScheduleLocalNotification(notif);
        }
    }
    
    

    然后绑一个component脚本在一个GameObject上即可:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.iOS;
    using iOSNS = UnityEngine.iOS.NotificationServices;
    
    public class Notification : MonoBehaviour
    {
        void Start ()
        {
            iOSNS.RegisterForNotifications(NotificationType.Alert | NotificationType.Badge | NotificationType.Sound);
            NotificationMgr.GetInstance().FlushPlanNotification();
        }
    }
    
    

    相关文章

      网友评论

      • 西芹_c432:大神 请教个问题 你有没有遇到本地推送 只推一条 但是在手机之前不卸载APP的情况下 更新APP 他不会删除之前已经挂载的本地推送 ,举个例子就是 我这个通知24小时推送一次 我今天中午12点退游戏 明天12点会收到通知 然后我可能1点 在苹果商店更新重装了我的APP 他明天12点还是会推送 我期间也上游戏了 按理说也会清除本地的推送了

      本文标题:Unity iOS本地推送踩坑实录

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