首页 >Unity3D频道 >【Unity3D研究院之游戏开发】 > Unity3D研究院之IOS本地消息通知LocalNotification的使用(六十七)
2014
05-19

Unity3D研究院之IOS本地消息通知LocalNotification的使用(六十七)

         现在的游戏里一般都会有本地消息,比如每天定时12点或者下午6点告诉玩家进入游戏领取体力。这种东西没必要服务器去推送,客户端就可以完成。Unity里面提供了本地任务的功能但是只有IOS上才支持,开始我有点不解为什么Android上不支持,当我把Android的本地通知做完后,我才明白。IOS源生的API中就支持固定时间循环推送,而Android上需要自己开启一个Services,启动一个AlarmManager的定时器任务,还好我之前开发过Android, 言归正传今天我们先说IOS上的本地通知。

代码其实很简单,我先说下原理后面给出实现步骤。

1.当游戏进入后台的时候注册本地通知

2.当游戏进入前台的时候关闭本地通知

下面上代码。

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {
	//本地推送
	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(newDate > System.DateTime.Now)
		{
			LocalNotification localNotification = new LocalNotification();
			localNotification.fireDate =newDate;	
			localNotification.alertBody = message;
			localNotification.applicationIconBadgeNumber = 1;
			localNotification.hasAction = true;
			if(isRepeatDay)
			{
				//是否每天定期循环
				localNotification.repeatCalendar = CalendarIdentifier.ChineseCalendar;
				localNotification.repeatInterval = CalendarUnit.Day;
			}
			localNotification.soundName = LocalNotification.defaultSoundName;
			NotificationServices.ScheduleLocalNotification(localNotification);
		}
	}

	void Awake()
	{
		//第一次进入游戏的时候清空,有可能用户自己把游戏冲后台杀死,这里强制清空
		CleanNotification();
	}

	void OnApplicationPause(bool paused)
	{
		//程序进入后台时
		if(paused)
		{
			//10秒后发送
			NotificationMessage("雨松MOMO : 10秒后发送",System.DateTime.Now.AddSeconds(10),false);
			//每天中午12点推送
			NotificationMessage("雨松MOMO : 每天中午12点推送",12,true);
		}
		else
		{
			//程序从后台进入前台时
			CleanNotification();
		}
	}

	//清空所有本地消息
	void CleanNotification()
	{
		LocalNotification l = new LocalNotification (); 
		l.applicationIconBadgeNumber = -1; 
		NotificationServices.PresentLocalNotificationNow (l); 
		NotificationServices.CancelAllLocalNotifications (); 
		NotificationServices.ClearLocalNotifications (); 
	}
}

屏幕快照 2014-05-19 下午8.26.47 

弹出的消息通知。

屏幕快照 2014-05-19 下午8.26.31

最后是本工程的下载地址,雨松MOMO祝大家学习愉快。

 

http://vdisk.weibo.com/s/qDm4IY-bnMQb

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity3D研究院之IOS本地消息通知LocalNotification的使用(六十七)》有 75 条评论

  1. 我android推送成功了,但是点击推送进入游戏,就给游戏干死了,直接闪屏退出,,后来我又换了个Activity,Intent,从这个activity跳回继承UnityPlayerActivity的类,还是不行,,求大神解答

  2. 张浩说:

    能加下联系方式吗??我这里安卓碰到问题 求指点

  3. yy说:

    我发现10秒后的发送 都能成功,但是定时发送的很不好用,还没成功过。

  4. nam说:

    Unity3D研究院之IOS本地消息通知LocalNotification的使用(六十七) - 雨松MOMO程序研究院 - 1 才发现原来unity自己封装了 ios的通知 感谢

  5. bootload说:

    大神们---此方法---不支持IOS8系统,有解决方法吗?????

  6. muziazheng说:

    楼主,有安卓的吗?

  7. 阿精说:

    MOMO大大请问ANDROID的本地如何制作?谢谢

  8. momo大神,想请教一下,为什么使用startservice方法开启一个service之后,结束掉unity主进程,service就不会再起作用了?我使用的是unity4.3.4创建的eclipse工程,在工程中直接进行相关代码的添加。

  9. MOMO大神,求回复,项目需要实现远程桌面监控,服务器端可以查看客户端的画面和操作。不知道你有没有相关的项目和经验?

  10. 小貓说:

    大大很高興的~我的安卓已經可以順利傳入intent參數~也遇到不少困難~順利的成功了~不過ios這邊卻有個問題~就是當我由notification center 點了這訊息~有辦法由unity讓訊息從center中心消失嗎? 目前只有寫-1 只有badge數字消失 , Cancel clear 也都沒消除center 的是只能由xcode 去執行嗎

  11. Fighter说:

    你好,怎么实时获取手机垂直和水平的旋转角度,谢谢!

  12. 小貓说:

    大大好~ 我剛好在做這個~安卓我用了別人的plugin~但遇到了個問題~就是click notification 後~ 我該如何把參數傳遞入給app呢?~ intent 該怎在unity 接收?

  13. 雨凇momo,这种东西Android要怎么做啊,我试着用Unity调用Android里面的Notification,但是发现没有用

  14. 秋水说:

    能分享一个安卓的吗

  15. 小郭说:

    还有,你上面进入之后首先就把所有本地通知都清除了,那如果是每日提醒的,是不是也都删除了?是不是还要判断?

  16. 小郭说:

    这几天也都在看这个,我的app添加了本地通知,然后装在ipod上面,在系统的设置-通知中心-包括 里面就有我的app对应的一条,这里面可以开关各种通知,这里和程序里面的通知有什么关系?

  17. Revover说:

    大大求助啊!要做一个虚拟漫游项目,要求是动态加载地形,随着漫游移动实时加载外部提供的模型转化为新的地形。但是不知道unity下怎么实现,我现在的思路是每隔一段时间将下载的模型资源通过脚本转化为地形,要怎么实现呢??

  18. cwwqq说:

    因为我想要可以生成ios之后都能添加图片,所以放在了Cache文件里,unity用绝对路径都能读,但是生成iOS之后无论是用file://” Application.temporaryCachePath “/x.png” 还是用file:// 绝对路径都不能,而用网络图片ios里也只有黑色一遍.

  19. cwwqq说:

    想请教一下,我用WWW读取本地图片的时候,在unity里面读取完全没问题,但是转成ios之后就读取不出来,变成红色问号了,知道是什么问题么。

留下一个回复

你的email不会被公开。 必填项已用 * 标注。