参考:http://blog.csdn.net/azhou_hui/article/details/50790870

1. 本地推送主要包括在android和ios上,下面所有的代码都是本人写的,经过测试是没有问题的,已经运用到项目中了。首先是接口INotification:

  1. using System;
  2.  
  3. public interface INotification : IDisposable
  4. {
  5. /// <summary>
  6. /// 注册一个推送
  7. /// </summary>
  8. /// <param name="id">消息唯一标识</param>
  9. /// <param name="name">消息弹出一时在手机屏幕最上方显示的文字,对苹果无效</param>
  10. /// <param name="title">通知栏中消息的标题</param>
  11. /// <param name="content">通知栏中消息的正文</param>
  12. /// <param name="triggerTime">触发的时间</param>
  13. /// <param name="repeat">是否要每日重复触发</param>
  14. void Register(int id, string name, string title, string content, DateTime triggerTime, bool repeat);
  15.  
  16. /// <summary>
  17. /// 取消一个推送
  18. /// </summary>
  19. /// <param name="id">消息唯一标识</param>
  20. void Unregister(int id);
  21.  
  22. /// <summary>
  23. /// 取消所有推送
  24. /// </summary>
  25. void ClearAll();
  26. }

INotification

2. android的实现:

  1. #if UNITY_ANDROID
  2.  
  3. using System;
  4. using UnityEngine;
  5.  
  6. public class AndroidNotification : INotification
  7. {
  8. AndroidJavaObject m_javaObj = new AndroidJavaObject("com.example.localpush.AlarmReceiver");
  9.  
  10. public void Register(int id, string name, string title, string content, DateTime triggerTime, bool repeat)
  11. {
  12. int secondsFromNow = (int)(triggerTime - DateTime.Now).TotalSeconds;
  13.  
  14. m_javaObj.CallStatic("Register", new object[]
  15. {
  16. id,
  17. name,
  18. title,
  19. content,
  20. secondsFromNow,
  21. repeat
  22. });
  23. }
  24.  
  25. public void Unregister(int id)
  26. {
  27. m_javaObj.CallStatic("Unregister", id);
  28. }
  29.  
  30. public void ClearAll()
  31. {
  32. var types = Enum.GetValues(typeof(NotificationType));
  33. for (int i = ; i < types.Length * ; i++)
  34. Unregister(i);
  35. }
  36.  
  37. #region IDisposable
  38.  
  39. public void Dispose()
  40. {
  41. Dispose(true);
  42. GC.SuppressFinalize(this);
  43. }
  44.  
  45. protected virtual void Dispose(bool disposing)
  46. {
  47. if (disposing)
  48. {
  49. m_javaObj.Dispose();
  50. m_javaObj = null;
  51. }
  52. }
  53.  
  54. ~AndroidNotification()
  55. {
  56. Dispose(false);
  57. }
  58.  
  59. #endregion
  60. }
  61.  
  62. #endif

AndroidNotification

其中 "com.example.localpush.AlarmReceiver" 中的java代码如下:

  1. package com.example.localpush;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Calendar;
  5. import android.app.Activity;
  6. import android.app.AlarmManager;
  7. import android.app.Notification;
  8. import android.app.NotificationManager;
  9. import android.app.PendingIntent;
  10. import android.content.BroadcastReceiver;
  11. import android.content.Context;
  12. import android.content.Intent;
  13. import android.content.SharedPreferences;
  14. import android.content.SharedPreferences.Editor;
  15. import android.content.pm.ApplicationInfo;
  16. import android.content.pm.PackageManager;
  17. import android.content.pm.PackageManager.NameNotFoundException;
  18. import android.util.Log;
  19. import com.unity3d.player.UnityPlayer;
  20.  
  21. public class AlarmReceiver extends BroadcastReceiver
  22. {
  23. static final int NotificationCount = 10;
  24. static final int RepeatInterval = 24 * 60 * 60 * 1000;// 86400000
  25.  
  26. // Inner class
  27. static class BleachNotification
  28. {
  29. public int Id;
  30. public String Name;
  31. public String Title;
  32. public String Content;
  33. public long TriggerMillis;
  34. public boolean Repeat;
  35.  
  36. public BleachNotification(int id, String name, String title, String content, long triggerMillis, boolean repeat)
  37. {
  38. Id = id;
  39. Name=name;
  40. Title = title;
  41. Content = content;
  42. TriggerMillis = repeat?GetNextRepeatTime(triggerMillis):triggerMillis;
  43. Repeat = repeat;
  44. }
  45.  
  46. private long GetNextRepeatTime(long time)
  47. {
  48. long now = System.currentTimeMillis();
  49.  
  50. while(time<now)
  51. time+=RepeatInterval;
  52.  
  53. return time;
  54. }
  55. }
  56.  
  57. @Override
  58. public void onReceive(Context context, Intent intent)
  59. {
  60. String action = intent.getAction();
  61.  
  62. Log.d("Unity", "Bleach: onReceive......................" + action);
  63. if (action!=null && action.equals("android.intent.action.BOOT_COMPLETED"))
  64. {
  65. for (BleachNotification bn : LoadAllNotification())
  66. Register(bn, false);
  67. }
  68. else
  69. {
  70. if (!intent.getBooleanExtra("repeat", true))
  71. {
  72. int id = intent.getIntExtra("id", -1);
  73. if (id != -1)
  74. DisableNotification(context, id);
  75. }
  76.  
  77. NotificationManager nm=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
  78.  
  79. ApplicationInfo applicationInfo=null;
  80. try
  81. {
  82. final PackageManager pm=context.getPackageManager();
  83. applicationInfo = pm.getApplicationInfo(context.getPackageName(),PackageManager.GET_META_DATA);
  84. }
  85. catch (NameNotFoundException e)
  86. {
  87. Log.d("Unity","Bleach: onReceive failed, reason: get applicationInfo failed.");
  88. }
  89.  
  90. Notification notification=new Notification(applicationInfo.icon,intent.getStringExtra("name"),System.currentTimeMillis());
  91.  
  92. Intent notificationIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
  93. notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
  94. PendingIntent pi = PendingIntent.getActivity(context, 0, notificationIntent, 0);
  95.  
  96. notification.setLatestEventInfo(context, intent.getStringExtra("title"), intent.getStringExtra("content"), pi);
  97.  
  98. // Notify
  99. nm.notify(intent.getIntExtra("id",0),notification);
  100.  
  101. Log.d("Unity","Bleach: notify succeed!");
  102. }
  103. }
  104.  
  105. public static void Register(int id, String name, String title, String content, int secondsFromNow, boolean repeat)
  106. {
  107. Calendar calendar=Calendar.getInstance();
  108. calendar.setTimeInMillis(System.currentTimeMillis());
  109. calendar.add(Calendar.SECOND, secondsFromNow);
  110. long time=calendar.getTimeInMillis();
  111.  
  112. Register(new BleachNotification(id,name,title,content,time,repeat),true);
  113. }
  114.  
  115. private static void Register(BleachNotification bn,boolean isSave)
  116. {
  117. Activity activity =UnityPlayer.currentActivity;
  118.  
  119. Intent intent =new Intent(activity, AlarmReceiver.class);
  120. intent.putExtra("name", bn.Name);
  121. intent.putExtra("title", bn.Title);
  122. intent.putExtra("content", bn.Content);
  123. intent.putExtra("id", bn.Id);
  124. intent.putExtra("repeat",bn.Repeat);
  125.  
  126. PendingIntent pi=PendingIntent.getBroadcast(activity, bn.Id, intent, PendingIntent.FLAG_CANCEL_CURRENT);
  127.  
  128. // Schedule the alarm!
  129. AlarmManager am = (AlarmManager)activity.getSystemService(Context.ALARM_SERVICE);
  130. if(bn.Repeat)
  131. am.setRepeating(AlarmManager.RTC_WAKEUP, bn.TriggerMillis, RepeatInterval, pi);
  132. else
  133. am.set(AlarmManager.RTC_WAKEUP,bn.TriggerMillis, pi);
  134.  
  135. if(isSave)
  136. SaveNotification(bn);
  137.  
  138. Log.d("Unity", "Bleach: Start Alarm...,id: "+bn.Id+
  139. " name: "+bn.Name+
  140. " title: "+bn.Title+
  141. " content: "+bn.Content+
  142. " triggerMillis: "+bn.TriggerMillis+
  143. " currentTime:"+System.currentTimeMillis()+
  144. " repeat: "+bn.Repeat);
  145. }
  146.  
  147. public static void Unregister(int id)
  148. {
  149. Activity activity = UnityPlayer.currentActivity;
  150. Intent intent = new Intent(activity, AlarmReceiver.class);
  151. PendingIntent pi = PendingIntent.getBroadcast(activity, id, intent, PendingIntent.FLAG_CANCEL_CURRENT);
  152. AlarmManager am = (AlarmManager)activity.getSystemService(Context.ALARM_SERVICE);
  153. am.cancel(pi);
  154.  
  155. NotificationManager mNM = (NotificationManager)activity.getSystemService(Context.NOTIFICATION_SERVICE);
  156. mNM.cancel(id);
  157.  
  158. DisableNotification(activity, id);
  159.  
  160. Log.d("Unity","Bleach: Cancel, id: "+id);
  161. }
  162.  
  163. private static void DisableNotification(Context context,int id)
  164. {
  165. SharedPreferences sp = context.getSharedPreferences("Notification", Context.MODE_APPEND);
  166.  
  167. Editor edit = sp.edit();
  168. String sid = String.valueOf(id);
  169. edit.putInt(sid, -1);
  170. edit.commit();
  171. }
  172.  
  173. private static void SaveNotification(BleachNotification notification)
  174. {
  175. SharedPreferences sp = UnityPlayer.currentActivity.getSharedPreferences("Notification", Context.MODE_APPEND);
  176.  
  177. Editor edit = sp.edit();
  178. String sid = String.valueOf(notification.Id);
  179. edit.putInt(sid, 1);
  180. edit.putString(sid + "name", notification.Name);
  181. edit.putString(sid + "title", notification.Title);
  182. edit.putString(sid + "content", notification.Content);
  183. edit.putLong(sid + "triggerTime", notification.TriggerMillis);
  184. edit.putBoolean(sid + "repeat", notification.Repeat);
  185. edit.commit();
  186. }
  187.  
  188. private static ArrayList<BleachNotification> LoadAllNotification()
  189. {
  190. ArrayList<BleachNotification> l = new ArrayList<BleachNotification>();
  191. SharedPreferences sp = UnityPlayer.currentActivity.getSharedPreferences("Notification", Context.MODE_APPEND);
  192. int index = 0;
  193. while (index < NotificationCount)
  194. {
  195. String id = String.valueOf(index);
  196. if (sp.getInt(id, -1) != -1)
  197. {
  198. BleachNotification bn=new BleachNotification(
  199. index,
  200. sp.getString(id + "name", ""),
  201. sp.getString(id + "title", ""),
  202. sp.getString(id + "content",""),
  203. sp.getLong(id + "triggerTime", 0),
  204. sp.getBoolean(id + "repeat", false)
  205. );
  206. l.add(bn);
  207. }
  208. index++;
  209. }
  210. return l;
  211. }
  212. }

AlarmReceiver

manifest配置为:

  1. <!-- Add by tj[-->
  2. <receiver android:name="com.example.localpush.AlarmReceiver">
  3. <intent-filter>
  4. <action android:name="android.intent.action.BOOT_COMPLETED" />
  5. </intent-filter>
  6. </receiver>
  7.  
  8. <activity
  9. android:name="com.unity3d.player.UnityPlayerProxyActivity"
  10. android:label="@string/app_name"
  11. android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" >
  12. </activity>
  13.  
  14. <activity
  15. android:name="com.unity3d.player.UnityPlayerActivity"
  16. android:label="@string/app_name"
  17. android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" >
  18. </activity>
  19.  
  20. <activity
  21. android:name="com.unity3d.player.UnityPlayerNativeActivity"
  22. android:label="@string/app_name"
  23. android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" >
  24. <meta-data android:name="android.app.lib_name" android:value="unity" />
  25. <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
  26. </activity>
  27. <!-- ] -->

Manifest

3. ios 直接调用 unity3d 的 api,实现如下:

  1. #if UNITY_IPHONE
  2.  
  3. using System;
  4. using UnityEngine;
  5.  
  6. public class IOSNotification : INotification
  7. {
  8. static IOSNotification()
  9. {
  10. Clear();
  11.  
  12. NotificationServices.RegisterForLocalNotificationTypes(LocalNotificationType.Alert);
  13. }
  14.  
  15. public void Register(int id, string name, string title, string content, DateTime triggerTime, bool repeat)
  16. {
  17. var iosNotification = new LocalNotification()
  18. {
  19. alertBody = content,
  20. hasAction = false,
  21. applicationIconBadgeNumber = ,
  22. fireDate = triggerTime,
  23. soundName = LocalNotification.defaultSoundName,
  24. };
  25.  
  26. if (repeat)
  27. {
  28. iosNotification.repeatCalendar = CalendarIdentifier.ChineseCalendar;
  29. iosNotification.repeatInterval = CalendarUnit.Day;
  30. }
  31.  
  32. NotificationServices.ScheduleLocalNotification(iosNotification);
  33. }
  34.  
  35. public void Unregister(int id)
  36. {
  37.  
  38. }
  39.  
  40. public void ClearAll()
  41. {
  42. Clear();
  43. }
  44.  
  45. static void Clear()
  46. {
  47. var ln = new LocalNotification()
  48. {
  49. applicationIconBadgeNumber = -
  50. };
  51.  
  52. NotificationServices.PresentLocalNotificationNow(ln);
  53. NotificationServices.CancelAllLocalNotifications();
  54. NotificationServices.ClearLocalNotifications();
  55. }
  56.  
  57. #region INotification
  58.  
  59. public void Dispose()
  60. {
  61.  
  62. }
  63.  
  64. #endregion
  65. }
  66.  
  67. #endif

IOSNotification

4. 最后是一个与上层交互的接口:

  1. using System;
  2. using UnityEngine;
  3.  
  4. // 本地推送的类型,注意:id不能重复
  5. public enum NotificationType
  6. {
  7. SevenDaysNoLogin = , // 7日登陆
  8. SpecialTrain = , // 紧急特训
  9. SpaTime = , // 温泉
  10. LoginNextDay = , // 次日登陆
  11. PuYuanShopRefresh = , // 浦原商店刷新
  12. WorldBossOpen = , // 世界boss开启
  13. }
  14.  
  15. public class NotificationManager : IDisposable
  16. {
  17. INotification m_notification;
  18.  
  19. #region Singleton
  20.  
  21. static NotificationManager s_instance;
  22.  
  23. public static NotificationManager Instance
  24. {
  25. get
  26. {
  27. if (s_instance == null)
  28. s_instance = new NotificationManager();
  29. return s_instance;
  30. }
  31. }
  32.  
  33. #endregion
  34.  
  35. #region DefaultNotification
  36.  
  37. class DefaultNotification : INotification
  38. {
  39. public void Register(int id, string name, string title, string content, DateTime triggerTime, bool repeat)
  40. {
  41.  
  42. }
  43.  
  44. public void Unregister(int id)
  45. {
  46.  
  47. }
  48.  
  49. public void ClearAll()
  50. {
  51.  
  52. }
  53.  
  54. public void Dispose()
  55. {
  56.  
  57. }
  58. }
  59.  
  60. #endregion
  61.  
  62. private NotificationManager()
  63. {
  64. m_notification = CreateObj();
  65. }
  66.  
  67. INotification CreateObj()
  68. {
  69. INotification obj;
  70. #if UNITY_EDITOR
  71. obj = new DefaultNotification();
  72. #elif UNITY_ANDROID
  73. obj = new AndroidNotification();
  74. #elif UNITY_IPHONE
  75. obj = new IOSNotification();
  76. #else
  77. obj = new DefaultNotification();
  78. Debugger.LogWarning("Local push not support this platform");
  79. #endif
  80.  
  81. return obj;
  82. }
  83.  
  84. public void Register(int id, string content, DateTime triggerTime, bool repeat)
  85. {
  86. if (string.IsNullOrEmpty(content))
  87. throw new ArgumentException("content");
  88.  
  89. string title = MLocalization.Get(""); // 游戏名
  90. if (string.IsNullOrEmpty(title))
  91. throw new ArgumentException("title");
  92.  
  93. m_notification.Register(id, content, title, content, triggerTime, repeat);
  94.  
  95. Debug.Log(string.Format("local push, id: {0}, title: {1}, content: {2}, Time: {3} repeat: {4}", id, title, content, triggerTime, repeat));
  96. }
  97.  
  98. public void Register(NotificationType type, string content, DateTime triggerTime, bool repeat)
  99. {
  100. Register((int)type, content, triggerTime, repeat);
  101. }
  102.  
  103. public void Unregister(int id)
  104. {
  105. m_notification.Unregister(id);
  106. }
  107.  
  108. public void Unregister(NotificationType type)
  109. {
  110. Unregister((int)type);
  111. }
  112.  
  113. public void ClearAll()
  114. {
  115. m_notification.ClearAll();
  116. }
  117.  
  118. /// <summary>
  119. /// 登陆完成后更新本地推送
  120. /// </summary>
  121. public void UpdateWhenLoginComplete()
  122. {
  123. UpdateSevenDaysNoLogin();
  124.  
  125. //UpdateLoginNextDay();
  126.  
  127. UpdatePuYuanShopRefresh();
  128.  
  129. UpdateWorldBossOpen();
  130. }
  131.  
  132. #region Special notification
  133.  
  134. // 七天未登陆
  135. void UpdateSevenDaysNoLogin()
  136. {
  137. string content = MLocalization.Get("");
  138. var time = PlayerInfo.Instance().GetServerNow().AddDays();
  139.  
  140. Unregister(NotificationType.SevenDaysNoLogin);
  141. Register(NotificationType.SevenDaysNoLogin, content, time, false);
  142. }
  143.  
  144. // 紧急特训
  145. public void RegisterSpecialTrain(TrainingSpecially tr)
  146. {
  147. string content = MLocalization.Get("");
  148.  
  149. Register(NotificationType.SpecialTrain, content, tr.begin_time, true);
  150. }
  151.  
  152. // 温泉
  153. public void UpdateSpaTime()
  154. {
  155. string content = null;
  156.  
  157. // spaTime just notify once
  158. //for (int i = 0; i < ActivityInfoValue.Instance().spaStartTimeList.Count; i++)
  159. //{
  160. int notiId = (int)NotificationType.SpaTime + ;
  161. Unregister(notiId);
  162.  
  163. if (SystemSettingModel.Instance.NotifyHotSpring) // 系统设置
  164. {
  165. ulong spaStartTime = ActivityInfoValue.Instance().spaStartTimeList[];
  166. DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(, , ));
  167. DateTime dateTimeTrigger = dateTimeStart.AddSeconds(spaStartTime).ToLocalTime();
  168.  
  169. if (content == null)
  170. content = MLocalization.Get("");
  171.  
  172. Register(notiId, content, dateTimeTrigger, true);
  173. }
  174. //}
  175. }
  176.  
  177. public void ClearSpaTime()
  178. {
  179. if (ActivityInfoValue.Instance().spaStartTimeList == null)
  180. return;
  181. for (int i = ; i < ActivityInfoValue.Instance().spaStartTimeList.Count; i++)
  182. {
  183. int notiId = (int)NotificationType.SpaTime + i;
  184. Unregister(notiId);
  185. }
  186. }
  187.  
  188. /*
  189. * 当玩家首次打开客户端进入游戏时,设置一条推送,在第二天的20点进行推送
  190. * 当玩家第二天20点之前,登录过游戏,则取消此条推送。
  191. * 推送文字为“你今天还没有登录死神哦,登录即可入手斩月。“(本文字为语言包文字)
  192. */
  193. void UpdateLoginNextDay()
  194. {
  195. string prefKey = string.Format("LocalPush.{0}.{1}", PlayerInfo.Instance().roleID, NotificationType.LoginNextDay);
  196. int prefValue = PlayerPrefs.GetInt(prefKey);
  197.  
  198. Unregister(NotificationType.LoginNextDay);
  199.  
  200. if (prefValue <= )
  201. {
  202. DateTime serverNow = PlayerInfo.Instance().GetServerNow();
  203. string timeString = GameOption.Instance().NotifyBladeTime;
  204. DateTime time = DateTime.Parse(timeString);
  205. DateTime triggerTime = new DateTime(serverNow.Year, serverNow.Month, serverNow.Day, time.Hour, time.Minute, ).AddDays();
  206. string content = MLocalization.Get("");
  207.  
  208. Register(NotificationType.LoginNextDay, content, triggerTime, false);
  209.  
  210. PlayerPrefs.SetInt(prefKey, );
  211. }
  212. }
  213.  
  214. // 浦原商店刷新
  215. public void UpdatePuYuanShopRefresh()
  216. {
  217. Unregister(NotificationType.PuYuanShopRefresh);
  218.  
  219. if (SystemSettingModel.Instance.NotifyShopRefresh)
  220. {
  221. DateTime time = DateTime.Parse(GameOption.Instance().refreshShopResetTime[]); // 只需要每天9点推送
  222. DateTime serverNow = PlayerInfo.Instance().GetServerNow();
  223. DateTime triggerTime = new DateTime(serverNow.Year, serverNow.Month, serverNow.Day, time.Hour, time.Minute, );
  224. string content = MLocalization.Get("");
  225.  
  226. Register(NotificationType.PuYuanShopRefresh, content, triggerTime, true);
  227. }
  228. }
  229.  
  230. // 世界 boss 开启
  231. public void UpdateWorldBossOpen()
  232. {
  233. Unregister(NotificationType.WorldBossOpen);
  234.  
  235. bool isOpen = PlayerInfo.Instance().openedSystemID.Contains((uint)SystemEnum.WorldBoss);
  236. if (isOpen && SystemSettingModel.Instance.NotifyWorldBossOpen)
  237. {
  238. string content = MLocalization.Get("");
  239. DateTime serverNow = PlayerInfo.Instance().GetServerNow();
  240. string timeString = GameOption.Instance().bossYammyNotifyTime;
  241. DateTime time = DateTime.Parse(timeString);
  242. DateTime triggerTime = new DateTime(serverNow.Year, serverNow.Month, serverNow.Day, time.Hour, time.Minute, );
  243.  
  244. Register(NotificationType.WorldBossOpen, content, triggerTime, true);
  245. }
  246. }
  247.  
  248. #endregion
  249.  
  250. public void Dispose()
  251. {
  252. m_notification.Dispose();
  253. }
  254. }

NotificationManager

转载请注明出处:http://www.cnblogs.com/jietian331/p/5025561.html

unity3d 之本地推送的更多相关文章

  1. iOS-推送,证书申请,本地推送

    介绍一点点背景资料 众所周知,使用推送通知是一个很棒的.给应用添加实时消息通知的方式.这样做的结局是,开发者和用户之间,彼此永远保持着一种令人愉悦的亲密关系. 然而不幸的是,iOS的推送通知并非那么容 ...

  2. iOS 本地推送通知

    1.什么是本地推送通知 不需要联网的情况下,应用程序经由系统发出的通知 2.本地推送的使用场景 定时提醒,如玩游戏.记账.闹钟.备忘录等 3.实现本地推送通知的步骤 创建本地推送通知的对象UILoca ...

  3. IOS中程序如何进行推送消息(本地推送,远程推送)

    [1]-------------什么是推送消息? 我就以一张图解释------------ [2]-----------IOS程序中如何进行本地推送?----------- 2.1,先征求用户同意 1 ...

  4. IOS 本地推送 IOS10.0以上 static的作用 const的作用

    //需要在AppDelegate里面启动APP的函数 加上 UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNot ...

  5. 本地推送UILocalNotification

    //本地推送---无需网络,由本地发起 UILocalNotification *localNotification = [[UILocalNotification alloc]init]; //设置 ...

  6. iOS本地推送与远程推送

    原文在此 分为本地推送和远程推送2种.可以在应用没有打开甚至手机锁屏情况下给用户以提示.它们都需要注册,注册后系统会弹出提示框(如下图)提示用户是否同意,如果同意则正常使用:如果用户不同意则下次打开程 ...

  7. IOS之推送通知(本地推送和远程推送)

    推送通知和NSNotification是有区别的: NSNotification:是看不到的 推送通知:是可以看到的 IOS中提供了两种推送通知 本地推送通知:(Local Notification) ...

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

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

  9. Swift - 推送之本地推送(UILocalNotification)

    // 本地推送通知是通过实例化UILocalNotification实现的.要实现本地化推送可以在AppDelegate.swift中添加代码实现,本事例是一个当App进入后台时推送一条消息给用户. ...

随机推荐

  1. SpringMVC redirect乱码问题

    转:http://blog.csdn.net/xubo_zhang/article/details/8239725 spring redirect 用spring redirect中文会乱码:如下示例 ...

  2. awk 用法小结

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  3. ignite客户端找不到服务端的时候如何设置退出

    ignite启动客户端时需要有服务端支持: Ignition.setClientMode(true); Ignition.start("ignite.xml"); 这里有个问题,当 ...

  4. hiho1246(数学求模)

    input 1<=n<=2000 a1 a2 ... an 1<=ai<=5*10e7 output n行,第i行指切成i段,每段和的最大公约数的最大值 做法:环形数组切成n段 ...

  5. PostConstruct注解

    应用场景:当你需要往Bean里注入一个其父类中定义的属性,而你又无法复写父类的属性或属性的setter方法时 public class UserDaoImpl extends HibernateDao ...

  6. libmysql.dll 找不到

    在用C#开发的时候,需要连接MySQL  ,系统提示  libmysql.dll 找不到模块. 我们可以找到 MySQL安装文件夹下的 C:\Program Files\MySQL\MySQL Ser ...

  7. 内存管理 & 内存优化技巧 浅析

    内存管理 浅析 下列行为都会增加一个app的内存占用: 1.创建一个OC对象: 2.定义一个变量: 3.调用一个函数或者方法. 如果app占用内存过大,系统可能会强制关闭app,造成闪退现象,影响用户 ...

  8. ActiveMQ的配置与使用

    1.什么是ActiveMQ MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来 ...

  9. 转:使用WebDriver过程中遇到的那些问题

    在做web项目的自动化端到端测试时主要使用的是Selenium WebDriver来驱动浏览器.Selenium WebDriver的优点是支持的语言多,支持的浏览器多.主流的浏览器Chrome.Fi ...

  10. circularprogressbar/smoothprogressbar开源视图使用学习

    github地址:https://github.com/castorflex/SmoothProgressBar 多彩圆形进度条和多彩水平进度条 colors.xml 定义变化的颜色内容,用gplus ...