using System; using Foundation; using Microsoft.AppCenter; using Microsoft.AppCenter.Analytics; using Microsoft.AppCenter.Crashes; using Shared; using Shared.Common; using Shared.IOS.TBL; using UIKit; namespace Home.IOS { [Register("AppDelegate")] public class AppDelegate : BaseApplicationDelegate { public static bool haveToSignOut = false; // class-level declarations public override UIWindow Window { get; set; } internal static UINavigationController rootViewController; public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions) { //全视通调用FinishedLaunch Shared.IOS.HDLFVSDK.Video.FVapplication(application,new NSDictionary()); Shared.Application.IsGpsEnable = false; Shared.Application.IsMusicEnable = false; base.FinishedLaunching(application, launchOptions); Shared.Application.FontSize = 12; Shared.Application.IsUsePingFang = true; Window = new UIWindow(UIScreen.MainScreen.Bounds); rootViewController = new UINavigationController(new GateWay.Ios.MainViewController()) { NavigationBarHidden = true }; Window.RootViewController = rootViewController; Window.MakeKeyAndVisible(); Shared.IOS.TBL.WXApi.RegisterApp("wx2ec8f53f6fa36e82", "https://hdlcontrol.com/ZigbeeApp/"); DeviceTokenAction += (deviceToken) => { if (!string.IsNullOrEmpty(deviceToken)) { Shared.Common.Config.Instance.RegistrationID = deviceToken; Shared.Common.Config.Instance.Save(); } }; 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; } } } } } } } } } AppCenter.Start("0ca801a2-742b-42fb-ba10-7ba4391371aa", typeof(Analytics), typeof(Crashes)); GDMapKit.setGDApiKey("3889cdfa4ef10c0d43348ffa2c1017c8");//高德地图key return true; } public override void ReceivedLocalNotification(UIApplication application, UILocalNotification notification) { } public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action completionHandler) { if (userInfo == null) { //var alert = new Alert("", "userInfo为空", ""); //alert.Show(); return; } Console.WriteLine(userInfo); if (application.ApplicationState == UIApplicationState.Active || application.ApplicationState == UIApplicationState.Background) { NSString key_hiddenJson = new NSString("HiddenJson"); //var alert1 = new Alert("", "收到推送了", ""); //alert1.Show(); if (userInfo.ContainsKey(key_hiddenJson)) { var hiddenJson = userInfo["HiddenJson"].ToString(); //var alert = new Alert("", hiddenJson, ""); //alert.Show(); 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(); CommonPage.Instance.ShowErrorInfoAlert(Shared.R.MyInternationalizationString.uHadBeenLoginAndOffLine); } } } } } 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); } /// /// ios通知栏点击打开可视对讲的方法 /// /// 云端推过来的数据 private void VideoMethod(string hiddenJson) { var json = Newtonsoft.Json.Linq.JObject.Parse(hiddenJson); if (json == null) { return; } GateWay.Ios.ESVideoInfo eSVideoInfo = new GateWay.Ios.ESVideoInfo(); if (json["uuid"].ToString().Contains(",")) { var uuid = json["uuid"].ToString().Split(','); eSVideoInfo.ESVideoUUID = uuid[0]; } else { eSVideoInfo.ESVideoUUID = json["uuid"].ToString(); } eSVideoInfo.DeviceName = Language.StringByID(Shared.R.MyInternationalizationString.theOutdoorUnit); eSVideoInfo.ESRoomID = int.Parse(json["roomno"].ToString()); if (!string.IsNullOrEmpty(json["unitno"].ToString())) { string str = json["unitno"].ToString(); string str1 = str.Substring(0, 2).TrimStart('0'); string str2 = str.Substring(2, 2).TrimStart('0'); eSVideoInfo.RoomName = str1 + Language.StringByID(Shared.R.MyInternationalizationString.dong) + str2 + Language.StringByID(Shared.R.MyInternationalizationString.unit); } GateWay.Ios.ESVideo.ShowESvideoVideoIntercom(eSVideoInfo); //var url = "https://global.hdlcontrol.com/HangZhouHdlCloudApi/VideoIntercom/Answer"; //var dd=await Shared.Phone.Device.Logic.Send.HttpWebRequest(url, json.ToString(), "POST", 3, true); } public override void ReceivedRemoteNotification(UIApplication application, NSDictionary userInfo) { Console.WriteLine(userInfo); if (application.ApplicationState == UIApplicationState.Active) { System.Console.WriteLine("ReceivedRemoteNotification1"); } else if (application.ApplicationState == UIApplicationState.Background) { System.Console.WriteLine("ReceivedRemoteNotification2"); } else if (application.ApplicationState == UIApplicationState.Inactive) { System.Console.WriteLine("ReceivedRemoteNotification3"); } } public override void OnResignActivation(UIApplication application) { // Invoked when the application is about to move from active to inactive state. // This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) // or when the user quits the application and it begins the transition to the background state. // Games should use this method to pause the game. base.OnResignActivation(application); Shared.IOS.HDLFVSDK.Video.FVapplicationWillResignActive(application); } public override void DidEnterBackground(UIApplication application) { // Use this method to release shared resources, save user data, invalidate timers and store the application state. // If your application supports background exection this method is called instead of WillTerminate when the user quits. //Shared.BusSocket.Stop ();On在这里停止BusSocket ZigBee.Common.Application.FindGateWaySocket.Stop(); base.DidEnterBackground(application); Shared.IOS.HDLFVSDK.Video.FVapplicationDidEnterBackground(application); } public override void WillEnterForeground(UIApplication application) { var internetStatus = GateWay.Ios.Reachability.InternetConnectionStatus(); Shared.Phone.UserCenter.HdlWifiLogic.Current.NetworkStateChanged((int)internetStatus); //ZigBee.Common.Application.FindGateWaySocket.Start(); // Called as part of the transiton from background to active state. // Here you can undo many of the changes made on entering the background. System.Console.WriteLine("WillEnterForeground"); UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0; base.WillEnterForeground(application); } public override void OnActivated(UIApplication application) { //全视通调用BecomeActive Shared.IOS.HDLFVSDK.Video.FVapplicationDidBecomeActive(application); // Restart any tasks that were paused (or not yet started) while the application was inactive. // If the application was previously in the background, optionally refresh the user interface. base.OnActivated(application); if (haveToSignOut == true) { //强制下线 CommonPage.Instance.SingOut(); CommonPage.Instance.ShowErrorInfoAlert(Shared.R.MyInternationalizationString.uHadBeenLoginAndOffLine); } //检查连接远程 //代码 //清除角标 CommonPage.Instance.clearBadgeNum(); } public override void WillTerminate(UIApplication application) { // Called when the application is about to terminate. Save data, if needed. See also DidEnterBackground. base.WillTerminate(application); } public static Action RespAction; public static void WXLogin() { var req = new SendAuthReq { Scope = "snsapi_userinfo", State = "ZigbeeApp", OpenID = "0c806938e2413ce73eef92cc3" }; WXApi.SendAuthReq(req, rootViewController, null, null); } MyWXApiDelegate myWXApiDelegate = new MyWXApiDelegate { }; class MyWXApiDelegate : WXApiDelegate { public override void OnReq(BaseReq req) { } public override void OnResp(BaseResp resp) { if (resp is SendAuthResp) { var sendAuthResp = resp as SendAuthResp; switch (sendAuthResp.ErrCode) { case 0: try { var result = new System.Net.WebClient { }.DownloadString($"https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx2ec8f53f6fa36e82&secret=a08585cd6ff2ce64570b9e7e6525dd8e&code={((SendAuthResp)resp).Code}&grant_type=authorization_code"); RespAction?.Invoke(result); } catch { RespAction?.Invoke(null); } break; default: RespAction?.Invoke(null); break; } } } } public override bool ContinueUserActivity(UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler) { return WXApi.HandleOpenUniversalLink(userActivity, myWXApiDelegate); } } } namespace Shared { public static class QRCode { static ZXing.Mobile.MobileBarcodeScanner scanner; public static async System.Threading.Tasks.Task ScanQRcode(Action action, string cancel = "取消", string flashText = "闪光灯", string titleText = "二维码扫描") { if (scanner == null) { var mZXingOverlayView = new Home.IOS.ZXingOverlayView(cancel, flashText, titleText); scanner = new ZXing.Mobile.MobileBarcodeScanner(Home.IOS.AppDelegate.rootViewController) { FlashButtonText = flashText, TopText = titleText, BottomText = "", CancelButtonText = cancel }; scanner.UseCustomOverlay = true; scanner.CustomOverlay = mZXingOverlayView; var bOn = false; mZXingOverlayView.OnCancel += () => { scanner?.Cancel(); }; mZXingOverlayView.OnTorch += () => { bOn = !bOn; scanner?.Torch(bOn); }; } var result = await scanner.Scan(); if (result != null) action?.Invoke(result.Text); else action?.Invoke(null); } public static byte[] BytesFromText(string text, int width = 300, int height = 300) { var barcodeWriter = new ZXing.Mobile.BarcodeWriter { Format = ZXing.BarcodeFormat.QR_CODE, Options = new ZXing.Common.EncodingOptions { Width = width, Height = height, Margin = 0 } }; barcodeWriter.Renderer = new ZXing.Mobile.BitmapRenderer(); var uiImage = barcodeWriter.Write(text); var data = uiImage.AsJPEG(); var resultBytes = new byte[data.Length]; System.Runtime.InteropServices.Marshal.Copy(data.Bytes, resultBytes, 0, resultBytes.Length); return resultBytes; } } }