using System; using Foundation; using HDL_ON; using Shared; using UIKit; using UserNotifications; using Microsoft.AppCenter; using Microsoft.AppCenter.Analytics; using Microsoft.AppCenter.Crashes; using HDL_ON.UI; using HDL_ON.DAL.Server; 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; //} internal 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)) { //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()); //读取推送信息 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) { Console.WriteLine("OnResignActivation"); UserInfo.Current.unlockTime = DateTime.Now; } public override void DidEnterBackground(UIApplication 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) { 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 { 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("b58fb35436"); //取消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(); AppCenter.Start("e1add75a-82c6-4a5c-a902-4705b195748e", typeof(Analytics), typeof(Crashes)); 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 (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); } } } else { HDLCommon.Current.AdjustPushMessage(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(); new AppUnlockPage().LoadPage(); UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0; HDL_ON.DriverLayer.Control.Ins.SearchLoaclGateway(); } } }