using System; using AdSupport; using com.hdl.on; using Foundation; using Microsoft.AppCenter; using Microsoft.AppCenter.Analytics; using Microsoft.AppCenter.Crashes; using Shared; using UIKit; using UserNotifications; using Harpy; using SmartHome; using Shared.SimpleControl; namespace SharedMethod { public static class SharedMethod { public static UIApplication sharedApp; public static void ChangeSkin () { if (UserConfig.Instance.SkinCode == 0) { sharedApp.StatusBarStyle = UIStatusBarStyle.LightContent; } else if (UserConfig.Instance.SkinCode == 1) { sharedApp.StatusBarStyle = UIStatusBarStyle.Default; } } public static PageLayout CurPageLayout = null; public static bool IsBackground; public static string CheckVersion () { Console.WriteLine ("检查更新!!!!!!!!!!!!!"); //return ""; //var mainBundle = new NSBundle (); //NSDictionary infoDictionary = mainBundle.InfoDictionary;CFBundleShortVersionString //NSString appCurVersionNum = infoDictionary.ObjectForKey (@"CFBundleVersion"); string curVersion = NSBundle.MainBundle.InfoDictionary ["CFBundleShortVersionString"].ToString (); Harpy.Harpy.SharedInstance.CheckVersion (); //string url = "http://intercom.hdlcontrol.com/AppDownload/apk/hdlon.json";//获取下载文件的路径 //try { // var result = new System.Net.WebClient { }.DownloadData (url); // if (result != null) { // var sss = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (result)); // curVersion = sss.CodeIDString; // switch (sss.UpdateVersionType_IOS) { // case Shared.SimpleControl.Phone.UpdateVersionType.None: // curVersion = "999999"; // break; // case Shared.SimpleControl.Phone.UpdateVersionType.Option: // Harpy.Harpy.SharedInstance.AlertType = HarpyAlertType.Option; // break; // case Shared.SimpleControl.Phone.UpdateVersionType.Force: // Harpy.Harpy.SharedInstance.AlertType = HarpyAlertType.Force; // break; // } // } //} catch (Exception ex) { // Console.WriteLine ("System.Net.WebClient { }.DownloadData (url) : " + ex.Message); //} //if (!string.IsNullOrEmpty (Harpy.Harpy.SharedInstance.CurrentAppStoreVersion)) { // try { // MainPage.IsAppStoreVersionNewer = Convert.ToDouble (curVersion) > Convert.ToDouble (Harpy.Harpy.SharedInstance.CurrentAppStoreVersion); // } catch { // MainPage.IsAppStoreVersionNewer = true; // } //} else { // new System.Threading.Thread (() => { // System.Threading.Thread.Sleep (2000); // CheckVersion (); // }) { IsBackground = true }.Start (); //} //try { // if (MainPage.LoginUser != null) { // if (Shared.SimpleControl.MainPage.LoginUser.AccountString == @"464027401@qq.com") { // return $"TestIsAppStoreVersionNewer : {MainPage.IsAppStoreVersionNewer};; CurrentAppStoreVersion : {Harpy.Harpy.SharedInstance.CurrentAppStoreVersion}"; // } else { // return ""; // } // } //} catch { //} return ""; } } } namespace 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.FinishLaunching [Register ("AppDelegate")] public class AppDelegate : BaseApplicationDelegate { public override UIWindow Window{ get; set; } //public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations (UIApplication application, UIWindow forWindow) //{ // if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone) { // return UIInterfaceOrientationMask.Portrait; // } else { // return UIInterfaceOrientationMask.LandscapeRight | UIInterfaceOrientationMask.Portrait; // } //} //class MyUINavigationController : UINavigationController //{ // public MyUINavigationController (UIViewController viewController) : base (viewController) { } // public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations () // { // if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad) { // UIApplication.SharedApplication.SetStatusBarOrientation (UIInterfaceOrientation.LandscapeRight, false); // return UIInterfaceOrientationMask.LandscapeRight; // } else { // return UIInterfaceOrientationMask.Portrait; // } // } //} //public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations (UIApplication application, UIWindow forWindow) //{ // if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad) { // return UIInterfaceOrientationMask.LandscapeRight; // } else { // return UIInterfaceOrientationMask.LandscapeRight | UIInterfaceOrientationMask.Portrait; // } //} public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions) { AppCenter.Start ("b95f7814-49fb-4345-bac5-98e70d098252", typeof (Analytics), typeof (Crashes)); Console.WriteLine ("FinishedLaunching"); base.FinishedLaunching (application, launchOptions); SharedMethod.SharedMethod.sharedApp = application; //NSString* nsCount = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode]; string nsCount = NSLocale.CurrentLocale.CountryCode; if (nsCount != UserConfig.Instance.CountryCode) { UserConfig.Instance.CountryCode = nsCount; UserConfig.Instance.SaveUserConfig (); } application.IdleTimerDisabled = true; application.RegisterForRemoteNotificationTypes (UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound); Window = new UIWindow (UIScreen.MainScreen.Bounds); var Root = new UINavigationController (new ViewController ()) { NavigationBarHidden = true }; Window.RootViewController = Root; Window.MakeKeyAndVisible (); //window.AccessibilityNavigationStyle = UIAccessibilityNavigationStyle.Automatic; // check for a notification if (launchOptions != null) { // check for a remote notification if (launchOptions.ContainsKey (UIApplication.LaunchOptionsRemoteNotificationKey)) { NSDictionary remoteNotification = launchOptions [UIApplication.LaunchOptionsRemoteNotificationKey] as NSDictionary; if (remoteNotification != null) { //UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0; } } } 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); } if (UserConfig.Instance.SkinCode == 0) { application.StatusBarStyle = UIStatusBarStyle.LightContent; Shared.Application.Skin = UserConfig.Instance.CurrentSkinName; } else if (UserConfig.Instance.SkinCode == 1) { application.StatusBarStyle = UIStatusBarStyle.Default; Shared.Application.Skin = UserConfig.Instance.CurrentSkinName; } SkinStyle.Current.ChangeColor (); Harpy.Harpy.SharedInstance.PresentingViewController = this.Window.RootViewController; Harpy.Harpy.SharedInstance.WeakDelegate = this; Harpy.Harpy.SharedInstance.AlertType = Harpy.HarpyAlertType.Option; Harpy.Harpy.SharedInstance.DebugEnabled = false; //Harpy.Harpy.SharedInstance.ForceLanguageLocalization = Harpy.Constants.HarpyLanguageChineseSimplified; return true; } 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; UserConfig.Instance.tokenID = DeviceToken; UserConfig.Instance.phoneName = userPhoneName; UserConfig.Instance.SaveUserConfig (); } if (UserConfig.Instance.tokenID != DeviceToken) { string userPhoneName = UIDevice.CurrentDevice.Name; UserConfig.Instance.tokenID = DeviceToken; UserConfig.Instance.phoneName = userPhoneName; UserConfig.Instance.SaveUserConfig (); } } public override void DidReceiveRemoteNotification (UIApplication application, NSDictionary userInfo, Action completionHandler) { Console.WriteLine ("DidReceiveRemoteNotification:" + application.ApplicationState.ToString ()); UserConfig.Instance.SaveUserConfig (); RemoteInfo.Current.ReadMsgList (application.ApplicationState == UIApplicationState.Active ? true : false); UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0; } 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); } DateTime closeTime = DateTime.MinValue; public override void OnResignActivation (UIApplication application) { Console.WriteLine ("OnResignActivation"); Shared.BusSocket.Stop (); closeTime = DateTime.Now; } public override void DidEnterBackground (UIApplication application) { SharedMethod.SharedMethod.IsBackground = true; Console.WriteLine ("DidEnterBackground"); } public override void WillEnterForeground (UIApplication application) { SharedMethod.SharedMethod.IsBackground = false; Console.WriteLine ("WillEnterForeground"); //if (UIApplication.SharedApplication.ApplicationIconBadgeNumber > 0) // RemoteInfo.Current.ReadMsgList (NSUserDefaults.StandardUserDefaults.StringForKey ("PushDeviceToken"), true); UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0; // Called as part of the transiton from background to active state. // Here you can undo many of the changes made on entering the background. } public override void WillTerminate (UIApplication application) { Console.WriteLine ("WillTerminate"); // Called when the application is about to terminate. Save data, if needed. See also DidEnterBackground. } public override void OnActivated (UIApplication application) { Console.WriteLine ("OnActivated"); base.OnActivated (application); if (closeTime == DateTime.MinValue) { closeTime = DateTime.Now; }else if (closeTime.AddMinutes (2) > DateTime.Now) { // MqttCommon.DisConnectRemoteMqttClient (); } var netStatus = (int)Reachability.InternetConnectionStatus (); //有些系统版本这里启动比视图控制器快 if (!Shared.SimpleControl.MainPage.Showed) { System.Threading.Tasks.Task.Run (() => { while (true) { System.Threading.Thread.Sleep (10); if (Shared.SimpleControl.MainPage.Showed) { break; } } Shared.Application.RunOnMainThread (() => { Shared.BusSocket.Start (6000); Shared.SimpleControl.EquipmentPublicClass.CheckLinkRemote (netStatus); RemoteInfo.Current.ReadMsgList (true); if (SmartHome.WiFiSet.refreshView != null) { SmartHome.WiFiSet.refreshView (); } }); }); return; } else { Shared.BusSocket.Start (6000); Shared.SimpleControl.EquipmentPublicClass.CheckLinkRemote (netStatus); RemoteInfo.Current.ReadMsgList (true); } if (SmartHome.WiFiSet.refreshView != null) { SmartHome.WiFiSet.refreshView (); } if (netStatus == 0) return; //System.Threading.Tasks.Task.Run (() => { // SharedMethod.SharedMethod.CheckVersion (); //}); } } }