using System; using Foundation; using HDL_ON; using Shared; using UIKit; using HDL_ON.UI; using HDL_ON.DAL.Server; namespace RongAn { // The UIApplicationDelegate for the application. This class is responsible for launching the // User Interface of the application, as well as listening (and optionally responding) to application events from iOS. [Register("AppDelegate")] public class AppDelegate : BaseApplicationDelegateForHdlOn// BaseApplicationDelegate { // class-level declarations public override UIWindow Window { get; set; } //} public static UINavigationController rootViewController; public static void CleanApplicationIconBadgeNumber() { UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0; } public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) { //byte[] array = new byte[(ulong)deviceToken.Length]; //System.Runtime.InteropServices.Marshal.Copy(deviceToken.Bytes, array, 0, array.Length); //System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder(); //for (int i = 0; i < array.Length; i++) //{ // stringBuilder.AppendFormat("{0:x2}", array[i]); //} //string text = stringBuilder.ToString(); //if (NSUserDefaults.StandardUserDefaults.StringForKey("PushDeviceToken") != text) //{ // NSUserDefaults.StandardUserDefaults.SetString(text, "PushDeviceToken"); //} ///// Get current device token //var DeviceToken = text; //if (!string.IsNullOrWhiteSpace(DeviceToken)) //{ // DeviceToken = DeviceToken.Trim('<').Trim('>').Replace(" ", ""); //} //// Get previous device token //var oldDeviceToken = NSUserDefaults.StandardUserDefaults.StringForKey("PushDeviceToken"); //// Has the token changed? //if (string.IsNullOrEmpty(oldDeviceToken) || !oldDeviceToken.Equals(DeviceToken)) //{ // NSUserDefaults.StandardUserDefaults.SetString(DeviceToken, "PushDeviceToken"); // OnAppConfig.Instance.PushDeviceToken = DeviceToken; // OnAppConfig.Instance.PhoneName = UIDevice.CurrentDevice.Name; // OnAppConfig.Instance.SaveConfig(); //} //if (OnAppConfig.Instance.PushDeviceToken != DeviceToken) //{ // OnAppConfig.Instance.PushDeviceToken = DeviceToken; // OnAppConfig.Instance.PhoneName = UIDevice.CurrentDevice.Name; // OnAppConfig.Instance.SaveConfig(); //} } public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action completionHandler) { //Console.WriteLine("DidReceiveRemoteNotification:" + application.ApplicationState.ToString()); //Console.WriteLine("推送消息:"+userInfo); ////读取推送信息 //UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0; //if (userInfo == null) //{ // return; //} //Console.WriteLine(userInfo); ////HDLCommon.Current.ShowAlert("DidReceiveRemoteNotification:" + userInfo.ToString()); //if (application.ApplicationState == UIApplicationState.Active || application.ApplicationState == UIApplicationState.Background) //{ // HandleNotificationMessageUserInfo(userInfo, false); //} //else //{ // //Inactive // HandleNotificationMessageUserInfo(userInfo, false); //} //completionHandler(UIBackgroundFetchResult.NewData); } public override void ReceivedRemoteNotification(UIApplication application, NSDictionary userInfo) { if (application.ApplicationState == UIApplicationState.Active) { Console.WriteLine("ReceivedRemoteNotification1"); } else if (application.ApplicationState == UIApplicationState.Background) { Console.WriteLine("ReceivedRemoteNotification2"); } else if (application.ApplicationState == UIApplicationState.Inactive) { Console.WriteLine("ReceivedRemoteNotification3"); } } public override void OnResignActivation(UIApplication application) { Console.WriteLine("OnResignActivation"); UserInfo.Current.unlockTime = DateTime.Now; } public override void DidEnterBackground(UIApplication application) { //进入后台 BusSocketStop(); Console.WriteLine("DidEnterBackground"); } public override void WillEnterForeground(UIApplication application) { //回到前台,处理事件 BusSocketStart(); Console.WriteLine("WillEnterForeground"); } public override void WillTerminate(UIApplication application) { Console.WriteLine("WillTerminate"); } public override void OnActivated(UIApplication application) { Console.WriteLine("OnActivated"); base.OnActivated(application); } /// /// 设置当前使用语言 /// void SetCurrentLanguage() { if (string.IsNullOrEmpty(OnAppConfig.Instance.SetLanguage)) { if (NSLocale.PreferredLanguages[0].Contains("zh-")) { Language.CurrentLanguage = "Chinese"; } else { Language.CurrentLanguage = "English"; } } else { Language.CurrentLanguage = OnAppConfig.Instance.SetLanguage; } } public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions) { Console.WriteLine("111111111111"); SetCurrentLanguage(); //Shared.Application.FontSize = 12; //Bugly.Bugly.StartWithAppId("1dc40c170a"); //取消EditText默认密码输入方式 Shared.Application.IsEditTextContentTypePassword = false; //默认使用苹方字体 Shared.Application.IsUsePingFang = true; //保持屏幕常亮或者自动锁屏 application.IdleTimerDisabled = false; base.FinishedLaunching(application, launchOptions); Window = new UIWindow(UIScreen.MainScreen.Bounds); rootViewController = new UINavigationController(new ViewController()) { NavigationBarHidden = true }; Window.RootViewController = rootViewController; Window.MakeKeyAndVisible(); application.StatusBarStyle = UIStatusBarStyle.DarkContent; DealWithPushMes(launchOptions); Console.WriteLine("FinishedLaunching"); return true; } /// /// 处理通知消息 /// void HandleNotificationMessageUserInfo(NSDictionary userInfo, bool bFinishedLaunching) { try { if (userInfo.ContainsKey(new NSString("aps"))) { var aps = userInfo["aps"] as NSDictionary; var alert = aps["alert"] as NSDictionary; var body = alert["body"] as NSString; var title = alert["title"] as NSString; var expandData = ""; var messageType = ""; var expantContent = ""; var homeId = ""; if (userInfo.ContainsKey(new NSString("expandData"))) { var expandDataStr = userInfo["expandData"] as NSString; if (expandDataStr == null) { var expandDataNSD = userInfo["expandData"] as NSDictionary; if (expandDataNSD != null) { expandData = expandDataNSD.ToString(); if (expandDataNSD.ContainsKey(new NSString("messageType"))) { messageType = expandDataNSD["messageType"] as NSString; Utlis.WriteLine("messageType: " + messageType); } if (expandDataNSD.ContainsKey(new NSString("expantContent"))) { expantContent = expandDataNSD["expantContent"] as NSString; Utlis.WriteLine("expantContent: " + expantContent); } if (expandDataNSD.ContainsKey(new NSString("homeId"))) { homeId = expandDataNSD["homeId"].ToString(); Utlis.WriteLine("homeId: " + homeId); } } } else { expandData = expandDataStr; } } var pushMes = new JPushMessageInfo() { HomeId = homeId, Title = title, Content = body, Extras = expandData, messageType = messageType, expantContent = expantContent }; Utlis.WriteLine("PushMes title : " + pushMes.Title); Utlis.WriteLine("PushMes message : " + pushMes.Content); Utlis.WriteLine("PushMes extras : " + pushMes.Extras); if (!string.IsNullOrEmpty(pushMes.spk))//自研可视对讲需要记录时间反呼 { UserInfo.Current.pushMessageInfo = pushMes; UserInfo.Current.inCall = DateTime.Now; } if (bFinishedLaunching) { if (pushMes.Extras != null) { if (pushMes.Extras.Contains("OffLine")) { //haveToSignOut = true; //强制下线 UserInfo.Current.LastTime = DateTime.MinValue; UserInfo.Current.headImagePagePath = "LoginIcon/2.png";//重置用户头像 UserInfo.Current.SaveUserInfo(); HDLCommon.Current.ShowAlert(Language.StringByID(StringId.LoggedOnOtherDevices)); } else { //HDLCommon.Current.AdjustPushMessage(pushMes); this.CommonAdjustPushMessage(pushMes);//2023年04月13日15:55:54 修改 } } } else { //HDLCommon.Current.AdjustPushMessage(pushMes); this.CommonAdjustPushMessage(pushMes); } } } catch { //HDLCommon.Current.ShowAlert("catch2222"); } } ///// ///// 退出登录标记 ///// //bool haveToSignOut; /// /// 启动APP 处理通知 /// /// void DealWithPushMes(NSDictionary launchOptions) { //haveToSignOut = false; if (launchOptions != null) { // check for a remote notification if (launchOptions.ContainsKey(UIApplication.LaunchOptionsRemoteNotificationKey)) { NSDictionary userInfo = launchOptions[UIApplication.LaunchOptionsRemoteNotificationKey] as NSDictionary; if (userInfo != null) { //HandleNotificationMessageUserInfo(userInfo, true); } } } } /// /// 进入后台的时间 /// DateTime CloseTime = DateTime.Now; /// /// 进入后台处理时间 /// BusSocketStop /// void BusSocketStop() { //SharedMethod.SharedMethod.IsBackground = true; CloseTime = DateTime.Now; MainPage.IsEnterBackground = true; //进入后台mqtt正在连接重置状态 HDL_ON.DAL.Mqtt.MqttClient.RemoteMqttIsConnecting = false; HDL_ON.DriverLayer.UdpSocket._BusSocket.Stop(); } /// /// 回到前台,处理事件 /// void BusSocketStart() { if (CloseTime.AddSeconds(10) < DateTime.Now) { //后台超过10s就断开MQTT重连 //if (HDL_ON.DriverLayer.Control.Ins.IsRemote) { HDL_ON.DAL.Mqtt.MqttClient.DisConnectRemote("closeTime", false); } } MainPage.IsEnterBackground = false; HDL_ON.DriverLayer.UdpSocket._BusSocket.Start(); //重连mqtt防止mqtt进入假死状态 2023-05-03 22:55:12 wxr HDL_ON.DAL.Mqtt.MqttClient.InitState(); new AppUnlockPage().LoadPage(); UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0; HDL_ON.DriverLayer.Control.Ins.SearchLoaclGateway(); } public void CommonAdjustPushMessage(JPushMessageInfo pushMes) { new System.Threading.Thread(new System.Threading.ThreadStart(() => { while (MainPage.BasePageView == null) { System.Threading.Thread.Sleep(300); } Shared.Application.RunOnMainThread(() => { HDLCommon.Current.AdjustPushMessage(pushMes); }); })).Start(); } } }