博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 实现本地推送示例
阅读量:6656 次
发布时间:2019-06-25

本文共 2097 字,大约阅读时间需要 6 分钟。

hot3.png

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

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

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

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

下面上代码。

C#

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 (); 

}

}

转载于:https://my.oschina.net/starmier/blog/364784

你可能感兴趣的文章
MyEclipse定位class文件
查看>>
Wireshark的过滤规则
查看>>
bzoj1592[Usaco2008 Feb]Making the Grade 路面修整*
查看>>
ios中PagedFlowView的用法
查看>>
pcl_view简单使用
查看>>
[数据安全] 一个简洁快速的去数据特征的混淆算法(obfuscate)
查看>>
Android开源框架:初识ButterKnife
查看>>
[待补充]面向接口编程,数据驱动编程
查看>>
bzoj1502: [NOI2005]月下柠檬树
查看>>
拓扑排序
查看>>
100道java基础面试题
查看>>
docker基本使用
查看>>
java学习笔记 --- 异常
查看>>
正则化
查看>>
js练习——图片切换
查看>>
Android Studio 的 build 过程
查看>>
SQL Server查询数据库空间分配情况、数据库备份信息
查看>>
win8的几种关机方法。
查看>>
安装fastx_toolkit (gcc, pkg-config)
查看>>
mybatis自动生成的ExamMapper.xml方法总结
查看>>