using System; using Foundation; using HDL_ON; using Shared; using UIKit; using UserNotifications; using HDL_ON.UI; using HDL_ON.DAL.Server; using Intents; namespace SharedMethod { public static class SharedMethod { public static UIApplication sharedApp; public static PageLayout CurPageLayout = null; //public static bool IsBackground; //public static string CheckVersion() //{ // Harpy.Harpy.SharedInstance.CheckVersion(); // UserConfig.Instance.IsAppStoreVersionNewer = Harpy.Harpy.SharedInstance.TestIsAppStoreVersionNewer; // UserConfig.Instance.StoreVersion = Harpy.Harpy.SharedInstance.CurrentAppStoreVersion; // UserConfig.Instance.SaveUserConfig(); // if (Shared.SimpleControl. UserInfo.Current.AccountString == @"464027401@qq.com") // { // return $"TestIsAppStoreVersionNewer : {UserConfig.Instance.IsAppStoreVersionNewer};; CurrentAppStoreVersion : {UserConfig.Instance.StoreVersion}"; // } // else // { // return ""; // } //} } } namespace HDL_ON_iOS { // 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 override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions) //{ // // Override point for customization after application launch. // // If not required for your application you can safely delete this method // return true; //} 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"); //new Alert("", DeviceToken, "取消", "确定").Show(); //NSDictionary test = new NSDictionary(new NSString("123"), new NSString("test")); //NSError error; //NSData dicD = NSJsonSerialization.Serialize(test, NSJsonWritingOptions.PrettyPrinted,out error); ; //NSString str = new NSString(dicD,NSStringEncoding.UTF8); //new Alert("", str, "取消", "确定").Show(); // Has the token changed? if (string.IsNullOrEmpty(oldDeviceToken) || !oldDeviceToken.Equals(DeviceToken)) { //TODO: Put your own logic here to notify your server that the device token has changed/been created! // Save new device token NSUserDefaults.StandardUserDefaults.SetString(DeviceToken, "PushDeviceToken"); //UserInfo.Current.PushDeviceToken = DeviceToken; //UserInfo.Current.PhoneName = userPhoneName; //UserInfo.Current.SaveUserInfo(); OnAppConfig.Instance.PushDeviceToken = DeviceToken; OnAppConfig.Instance.PhoneName = UIDevice.CurrentDevice.Name; OnAppConfig.Instance.SaveConfig(); } if (OnAppConfig.Instance.PushDeviceToken != DeviceToken) { //string userPhoneName = UIDevice.CurrentDevice.Name; //UserInfo.Current.PushDeviceToken = DeviceToken; //UserInfo.Current.PhoneName = userPhoneName; //UserInfo.Current.SaveUserInfo(); 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); //var test = new NSDictionary(); //test.SetNilValueForKey(new NSString("test")); //NSError error; //NSData dicD = NSJsonSerialization.Serialize(userInfo, NSJsonWritingOptions.PrettyPrinted, out error); ; //NSString str = new NSString(dicD, NSStringEncoding.UTF8); //new Alert("", str, "取消", "确定").Show(); //读取推送信息 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"); } //string extKey1 = "PushResType"; //NSString extValue1 = userInfo.ValueForKey ((NSString)extKey1); } public override void OnResignActivation(UIApplication application) { //设置全视通状态 string systemVersion = UIKit.UIDevice.CurrentDevice.SystemVersion; string errorVersion = "16.2.0"; if (systemVersion.CompareTo(errorVersion) < 0)///全视通不兼容ios16以上的系统,不要加载这个先 { Shared.IOS.HDLFVSDK.Video.FVapplicationWillResignActive(application); } Console.WriteLine("OnResignActivation"); UserInfo.Current.unlockTime = DateTime.Now; } public override void DidEnterBackground(UIApplication application) { //设置全视通状态 //string systemVersion = UIKit.UIDevice.CurrentDevice.SystemVersion; //string errorVersion = "16.2.0"; //if (systemVersion.CompareTo(errorVersion) < 0)///全视通不兼容ios16以上的系统,不要加载这个先 //{ // Shared.IOS.HDLFVSDK.Video.FVapplicationDidEnterBackground(application); //} //SharedMethod.SharedMethod.IsBackground = true; //MainPage.IsEnterBackground = true; ////进入后台mqtt正在连接重置状态 //HDL_ON.DAL.Mqtt.MqttClient.RemoteMqttIsConnecting = false; //HDL_ON.DriverLayer.UdpSocket._BusSocket.Stop(); //进入后台 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) { //设置全视通状态 //string systemVersion = UIKit.UIDevice.CurrentDevice.SystemVersion; //string errorVersion = "16.2.0"; //if (systemVersion.CompareTo(errorVersion) < 0)///全视通不兼容ios16以上的系统,不要加载这个先 //{ // Shared.IOS.HDLFVSDK.Video.FVapplicationDidBecomeActive(application); //} Console.WriteLine("OnActivated"); base.OnActivated(application); //HDL_ON.DriverLayer.Control.Ins.SearchLoaclGateway(); //if (haveToSignOut == true) //{ ////强制下线 //UserInfo.Current.LastTime = DateTime.MinValue; //UserInfo.Current.headImagePagePath = "LoginIcon/2.png";//重置用户头像 //UserInfo.Current.SaveUserInfo(); //HDLCommon.Current.ShowAlert(Language.StringByID(StringId.LoggedOnOtherDevices)); //} } /// /// 设置当前使用语言 /// void SetCurrentLanguage() { if (string.IsNullOrEmpty(OnAppConfig.Instance.SetLanguage)) { if (NSLocale.PreferredLanguages[0].Contains("zh-")) { Language.CurrentLanguage = "Chinese"; } else if (NSLocale.PreferredLanguages[0].Contains("cs-")) { Language.CurrentLanguage = "Czech"; } else if (NSLocale.PreferredLanguages[0].Contains("ru-")) { Language.CurrentLanguage = "russian"; } else if (NSLocale.PreferredLanguages[0].Contains("bul")) { Language.CurrentLanguage = "български"; } else if (NSLocale.PreferredLanguages[0].Contains("es-")) { Language.CurrentLanguage = "Spanish"; } else { Language.CurrentLanguage = "English"; } } else { Language.CurrentLanguage = OnAppConfig.Instance.SetLanguage; } } public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions) { //设置全视通状态 //string systemVersion = UIKit.UIDevice.CurrentDevice.SystemVersion; //string errorVersion = "16.2.0"; //if (systemVersion.CompareTo(errorVersion) < 0)///全视通不兼容ios16以上的系统,不要加载这个先 //{ // Shared.IOS.HDLFVSDK.Video.FVapplication(application, new NSDictionary()); //} 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(); SharedMethod.SharedMethod.sharedApp = application; //NSString* nsCount = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode]; application.StatusBarStyle = UIStatusBarStyle.DarkContent; //window.AccessibilityNavigationStyle = UIAccessibilityNavigationStyle.Automatic; // check for a notification DealWithPushMes(launchOptions); //if (UIApplication.SharedApplication.ApplicationIconBadgeNumber > 0) //{ // //RemoteInfo.Current.ReadMsgList(true); //} 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(); } } }