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; 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"); string userPhoneName = UIDevice.CurrentDevice.Name; OnAppConfig.Instance.PushDeviceToken = DeviceToken; OnAppConfig.Instance.PhoneName = userPhoneName; OnAppConfig.Instance.SaveUserConfig(); } if (OnAppConfig.Instance.PushDeviceToken != DeviceToken) { string userPhoneName = UIDevice.CurrentDevice.Name; OnAppConfig.Instance.PushDeviceToken = DeviceToken; OnAppConfig.Instance.PhoneName = userPhoneName; OnAppConfig.Instance.SaveUserConfig(); } } 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); if (application.ApplicationState == UIApplicationState.Active || application.ApplicationState == UIApplicationState.Background) { NSString key_hiddenJson = new NSString("HiddenJson"); if (userInfo.ContainsKey(key_hiddenJson)) { var hiddenJson = userInfo["HiddenJson"].ToString(); if (string.IsNullOrEmpty(hiddenJson)) { return; } if (hiddenJson.Contains("cmtID")) { /////目前根据这个判断是否是可视对讲数据 //VideoMethod(hiddenJson); } else { NSDictionary hiddenJsonDic = userInfo["HiddenJson"] as NSDictionary; if (hiddenJsonDic == null) { return; } NSString key_Offline = new NSString("Offline"); if (hiddenJsonDic.ContainsKey(key_Offline)) { string signOut = hiddenJsonDic["Offline"].ToString(); if (signOut == "0") { //不下线 } else { //强制下线 //CommonPage.Instance.SingOut(); HDLCommon.Current.ShowAlert(Language.StringByID(StringId.LoggedOnOtherDevices)); } } } } } else { NSString key_hiddenJson = new NSString("HiddenJson"); if (userInfo.ContainsKey(key_hiddenJson)) { var hiddenJson = userInfo["HiddenJson"].ToString(); if (string.IsNullOrEmpty(hiddenJson)) { return; } if (hiddenJson.Contains("cmtID")) { /////目前根据这个判断是否是可视对讲数据 //VideoMethod(hiddenJson); } else { NSDictionary hiddenJsonDic = userInfo["HiddenJson"] as NSDictionary; if (hiddenJsonDic == null) { return; } NSString key_Offline = new NSString("Offline"); if (hiddenJsonDic.ContainsKey(key_Offline)) { string signOut = hiddenJsonDic["Offline"].ToString(); if (signOut == "0") { //不下线 } else { //标记下线 haveToSignOut = true; } } } } } 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"); OnAppConfig.Instance.unlockTime = DateTime.Now; //BusSocket.Stop(); } public override void DidEnterBackground(UIApplication application) { SharedMethod.SharedMethod.IsBackground = true; Console.WriteLine("DidEnterBackground"); } public override void WillEnterForeground(UIApplication application) { SharedMethod.SharedMethod.IsBackground = false; //BusSocket.Start(); new AppUnlockPage().LoadPage(); Console.WriteLine("WillEnterForeground"); UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0; } public override void WillTerminate(UIApplication application) { Console.WriteLine("WillTerminate"); } public override void OnActivated(UIApplication application) { Console.WriteLine("OnActivated"); base.OnActivated(application); if (haveToSignOut == true) { //强制下线 //CommonPage.Instance.SingOut(); HDLCommon.Current.ShowAlert(Language.StringByID(StringId.LoggedOnOtherDevices)); } } public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions) { //Shared.Application.FontSize = 12; Shared.Application.IsUsePingFang = true; 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)); base.FinishedLaunching(application, launchOptions); SharedMethod.SharedMethod.sharedApp = application; //NSString* nsCount = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode]; application.StatusBarStyle = UIStatusBarStyle.DarkContent; //string nsCount = NSLocale.CurrentLocale.CountryCode; //if ( UserInfo.Current != null && nsCount != UserInfo.Current.areaCode.ToString()) //{ // //int.TryParse(nsCount,out UserInfo.Current.areaCode); // //2020-11-18 // UserInfo.Current.areaCode = nsCount; // OnAppConfig.Instance.SaveUserConfig(); //} application.IdleTimerDisabled = true; application.RegisterForRemoteNotificationTypes(UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound); //window.AccessibilityNavigationStyle = UIAccessibilityNavigationStyle.Automatic; // check for a notification DealWithPushMes(launchOptions); if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0)) { var notificationSettings = UIUserNotificationSettings.GetSettingsForTypes(UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, null); application.RegisterUserNotificationSettings(notificationSettings); application.RegisterForRemoteNotifications(); } else { //==== register for remote notifications and get the device token // set what kind of notification types we want UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge; // register for remote notifications UIApplication.SharedApplication.RegisterForRemoteNotificationTypes(notificationTypes); } if (UIApplication.SharedApplication.ApplicationIconBadgeNumber > 0) { //RemoteInfo.Current.ReadMsgList(true); } //Harpy.Harpy.SharedInstance.PresentingViewController = this.Window.RootViewController; //Harpy.Harpy.SharedInstance.WeakDelegate = this; //Harpy.Harpy.SharedInstance.AlertType = Harpy.HarpyAlertType.Skip; //Harpy.Harpy.SharedInstance.DebugEnabled = false; //Harpy.Harpy.SharedInstance.ForceLanguageLocalization = Harpy.Constants.HarpyLanguageChineseSimplified; Console.WriteLine("FinishedLaunching"); return true; } /// /// 退出登录标记 /// bool haveToSignOut; /// /// 处理通知 /// /// 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) { NSString key_hiddenJson = new NSString("HiddenJson"); if (userInfo.ContainsKey(key_hiddenJson)) { var hiddenJson = userInfo["HiddenJson"].ToString(); if (!string.IsNullOrEmpty(hiddenJson)) { if (hiddenJson.Contains("cmtID")) { ///目前根据这个判断是否是可视对讲数据 // VideoMethod(hiddenJson); } else { NSDictionary hiddenJsonDic = userInfo["HiddenJson"] as NSDictionary; if (hiddenJsonDic != null) { NSString key_Offline = new NSString("Offline"); if (hiddenJsonDic.ContainsKey(key_Offline)) { string signOut = hiddenJsonDic["Offline"].ToString(); if (signOut == "0") { //不下线 } else { //标记下线 haveToSignOut = true; } } } } } } } } } } } }