欢迎加入Unity业内qq交流群:956187480

qq扫描二维码加群


参考博客地址:https://blog.csdn.net/qq_37310110/article/details/80423463

自打接了这个项目到现在天天活在煎熬之中,这不新需求来了。需要推送消息,然后在后端大哥的帮助下梳理了一下推送的大致流程。之后我就在网上参考广大开发者的方案。

依据我当前的项目我的理解,消息推送分本地客户端推送(不需要第三方sdk,不需要后端)和服务器推送(接第三方sdk或者不接),首先大致讲解一下本地客户端推送,这个推送是用不到服务器的,整个流程都是在客户端完成。

以下资料来源网络,如有侵权请告知

IOS本地推送:Unity内部封装了在iOS下的本地推送功能,可以很方便的实现在iOS设备上的简单本地推送。

命名空间为:UnityEngine.iOS 在Unity中的代码和直接用swift的代码基本类似。具体代码实现:

static void NotificationMessage(string message, System.DateTime newDate, bool isRepeatDay)
{        //推送时间需要大于当前时间if (newDate > System.DateTime.Now){UnityEngine.iOS.LocalNotificationlocalNotification = new UnityEngine.iO      S.LocalNotification();localNotification.fireDate = newDate;localNotification.alertBody = message;localNotification.applicationIconBadgeNumber = 1;localNotification.hasAction = true;if (isRepeatDay){                //是否每天定期循环localNotification.repeatCalendar = UnityEngine.iOS.CalendarIdentifier.C  hineseCalendar;//中国日历localNotification.repeatInterval = UnityEngine.iOS.CalendarUnit.Day;//每日推送}localNotification.soundName = UnityEngine.iOS.LocalNotification.defaultSound Name;UnityEngine.iOS.NotificationServices.RegisterForNotifications(UnityEngine.iOS.NotificationType.Alert | UnityEngine.iOS.NotificationType.Badge | UnityEngine.iOS.NotificationType.Sound);//以特定的类型推送UnityEngine.iOS.NotificationServices.ScheduleLocalNotification(localNotification);}
}    //游戏退出时调用
void OnApplicationQuit()
{        //每天中午12点推送NotificationMessage("每天中午12点推送", 12, true);
}    //游戏进入后台时或者从后台进入前台时调用
void OnApplicationPause(bool paused)
{        //程序进入后台时if (paused){            //每天中午12点推送NotificationMessage("每天12点推送", 12, true);}else{            //程序从后台进入前台时CleanNotification();}
}    //清除推送消息,在Awake中调用
void CleanNotification()
{UnityEngine.iOS.LocalNotification ln = new UnityEngine.iOS.LocalNotification();ln.applicationIconBadgeNumber = -1;UnityEngine.iOS.NotificationServices.PresentLocalNotificationNow(ln);UnityEngine.iOS.NotificationServices.CancelAllLocalNotifications();UnityEngine.iOS.NotificationServices.ClearLocalNotifications();
}

Android本地推送:

要想实现推送机制,那么第一步便是需要完成unity与android之间的交互,也就是c#与java之间的互相调用。

首先来看C# to java,通过查询unity官方api,发现unity提供了调用java代码的接口,下面贴出我封装好的一个类 
public class AndroidNative 

public static void ScheduleLocalNotification(string message, int seconds, int id) 

CallActivityFunction(“ScheduleLocalNotification”,message, seconds, id);

}

public static void callLoginMethod(string methodName)
{CallActivityFunction(methodName);
}
private static void CallActivityFunction(string methodName, params object[] args)
{#if UNITY_ANDROIDif(Application.platform != RuntimePlatform.Android) {return;}try {AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call(methodName, args);}catch(System.Exception ex){Debug.LogWarning(ex.Message);}#endif
}

可以看到jo.Call(methodName, args);这句代码就是实现c#调用java的关键了,而调用的方法名字既是java端的ScheduleLocalNotification方法。

至于java调用c#,因为推送暂时用不到,就不说了,也很简单,需要的可以自己去查下

android推送不比ios,ios总得来说是对开发者友好的,只需要启动一个推送,然后设置更新时间,就可以隔一段时间自动推送了,然而android不能,写一个推送,只能在你指定的时间推送一次,因此,要实现定时推送,就必须配合计时器使用了。

首先说下android定时器

需要在AndroidManifest.xml里面注册一个receiver: 
 
还需要实现一个receiver类,”com.XXX.XXX.MyReceiver”,该类继承自BroadcastReceiver。

接着我们启动一个定时器

 public void ScheduleLocalNotification (String message,int seconds, int notificationId )
{     JSONObject json = new JSONObject(); try {json.put("message", message);json.put("seconds",seconds);json.put("notificationId",notificationId);} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}Intent intent = new Intent(this,MyReceiver.class);intent.putExtra("json",json.toString());// get the AlarmManager instance   AlarmManager am= (AlarmManager) getSystemService(ALARM_SERVICE);  // create a PendingIntent that will perform a broadcast  PendingIntent pi= PendingIntent.getBroadcast(UnityPlayerNativeActivity.this, 0, intent, 0);  // just use current time + 10s as the Alarm time.   Calendar c=Calendar.getInstance();c.setTimeInMillis(System.currentTimeMillis());c.setTimeZone(TimeZone.getTimeZone("GMT+8"));//可以根据项目要求修改,秒、分钟、提前、延后c.add(Calendar.SECOND, seconds);// schedule an alarm  am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),86400000, pi);}

定时器就是通过广播的形式,建立一个长连接,然后在receiver类里面实现public void onReceive(Context context, Intent intent) { }方法,这样到了定时器设定的时间,就会走onRecevie方法,在该方法里面,即可实现推送逻辑,json也会通过透传的方式传递过来,String jasonStr = intent.getStringExtra(“json”);即可得到json字符串,然后起一个推送即可。

再来看推送实现,推送就很简单了,下面直接贴出代码,

 public static void registerLocalNotification(final Context context, final int seconds , final String message, final int notificationId) {        Builder notification = new Notification.Builder(context);   Resources res = context.getResources();int app_icon = res.getIdentifier("app_icon", "drawable", context.getPackageName());int app_name = res.getIdentifier("app_name", "string", context.getPackageName());String title = context.getString(app_name);Intent intent = new Intent(context, UnityPlayerNativeActivity.class);PendingIntent contentIntent = PendingIntent.getActivity(context, app_name, intent, PendingIntent.FLAG_UPDATE_CURRENT);notification.setAutoCancel(true);notification.setContentTitle(title);notification.setContentIntent(contentIntent);notification.setContentText(message);notification.setSmallIcon(app_icon);notification.setWhen(System.currentTimeMillis());final Notification notify = notification.build();getNotificationManager(context).notify(notificationId,notify);}private static NotificationManager getNotificationManager(Context context) {return (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);}

按照要求设置好信息以后,就可以正常推送了,注意图标一定要设置正确,否则推送无法正常显示。

参考链接    点击打开链接

这次只记录本地推送,下一篇记录第三方插件的运用


欢迎加入Unity业内qq交流群:956187480

qq扫描二维码加群

Unity 应用的消息推送《一》本地推送相关推荐

  1. iOS开发 - ANPs推送通知 标签: 推送通知ANPs远程推送、本地推送

    iOS开发 - ANPs推送通知 标签: 推送通知ANPs远程推送本地推送 2015-05-03 14:12 3510人阅读 评论(0) 收藏 举报 本文章已收录于:  iOS知识库  分类: [IO ...

  2. SWIFT推送之本地推送(UILocalNotification)之二带按钮的消息

    上一篇讲到的本地推送是普通的消息推送,本篇要讲一下带按钮动作的推送消息,先上个图瞅瞅: 继上一篇的内容进行小小的改动: 在didFinishLaunchingWithOptions方法内进行以下修改 ...

  3. Swift - 推送之本地推送(UILocalNotification)添加Button的点击事件

     上一篇讲到的本地推送是普通的消息推送,本篇要讲一下带按钮动作的推送消息 import UIKit @UIApplicationMain class AppDelegate: UIResponder, ...

  4. Cordova Plugin /JPush PhoneGap 极光推送_本地推送_消息推送

    一.JPush PhoneGap  安装配置 官方安装API: GitHub - jpush/jpush-phonegap-plugin: JPush's officially supported P ...

  5. 本地推送通知和远程推送通知

    推送通知 推送通知跟NSNotification有所区别: 1> NSNotification是抽象的,不可见的 2> 推送通知是可见的(能用肉眼看到) iOS中提供了2种推送通知: 本地 ...

  6. iOS-本地推送和远程推送,常用的三方推送和常用的测试方法,推送实现和原理详解...

    什么是消息推送 举一个常见的例子,我们的手机上经常会有弹出一些信息,例如QQ信息.微信信息等等,这就是常见的消息推送. 例如: 消息推送的类型: 在屏幕顶部显示一块横幅(显示具体内容) 在屏幕中间弹出 ...

  7. iOS 推送通知及推送扩展

    概述 iOS中的通知包括本地推送通知和远程推送通知,两者在iOS系统中都可以通过弹出横幅的形式来提醒用户,点击横幅会打开应用.在iOS 10及之后版本的系统中,还支持通知扩展功能(UNNotifica ...

  8. unity android本地推送,Unity安卓本地推送

    https://blog.csdn.net/macaopark/article/details/69053691 新建推送脚本:LocalReceive import android.annotati ...

  9. ionic 服务器消息推送,Ionic3 本地消息推送

    项目上有一个消息推送的功能,一开始想使用极光推送,在安卓上测试比较顺利,但是IOS上需要什么证书,没有开发者账号,感觉好麻烦.后面就想在每次启动app的时候,本地推送一次消息,碰巧官网上发现了这个插件 ...

最新文章

  1. 又美又飒!这位985大学小姐姐,堪称今年最强博士后!
  2. 洛谷P4216 [SCOI2015]情报传递(树剖+主席树)
  3. Linux下安装RabbitMQ
  4. 复制多级文件夹【应用】
  5. 认识线程 java 1615387415
  6. 4.线性和卷积——不同种类的噪声、中值滤波器揭破和实战_5
  7. 第 20 次 CSP认证 202009-5 密信与计数
  8. 自动加载简单实现 __autoload()
  9. Python+OpenCV:直方图均衡化(Histogram Equalization)
  10. python爬虫项目描述怎么写_爬虫项目咋写,爬取什么样的数据可以作为项目写在简历上?...
  11. HDU2048 神、上帝以及老天爷【递推】
  12. 凸优化第三章凸函数 3.4 拟凸函数
  13. springboot怎么返回404_springboot异常处理之404
  14. 《人工智能 一种现代方法》第三版 第1章 概述 笔记摘录
  15. php切图工具,前端切图常见技巧
  16. HDMI接口 PCB布线指南-4层板为例
  17. 微信Log日志分析——初步探索
  18. 树形结构的数据库表设计
  19. 移动web基础:视口(viewport),流式布局 JDM京东移动端开发
  20. 紫铜带、黄铜带、锡磷青铜带、白铜带的特性

热门文章

  1. Redis之Redis基础、环境搭建、主从切换
  2. 互联网商业变现与计算广告(干货+5000字精彩问答)
  3. 使用广播信道的数据链路层相关知识点
  4. 荐读:Xilinx ZYNQ 动手实操演练
  5. windows下cmd命令行显示UTF8字符设置(CHCP命令)
  6. JAVA JDBC连接步骤代码,SQL注入,处理异常try catch 的快捷键
  7. java程序员工作中遇到的问题解决记录
  8. DBD::mysql的安装
  9. 拼多多关键词测试软件,拼多多图片怎么测试?有哪些步骤?
  10. Centos7 查看系统版本信息