Unity ios 설정 인터페이스 점프

29376 단어 Unity3D기초 지식
Unity ios 설정 인터페이스 점프
1. 기능은 iOS 네트워크 설정 검사를 필요로 한다. 만약에 네트워크가 없으면 사용자가 네트워크 링크를 닫을 수도 있고 ios는 게임에서 네트워크 설정 스위치로 바로 이동할 수 있다.
2. 네트워크 검측 직접 코드

        public static bool HasNetwork() {
            return Application.internetReachability != NetworkReachability.NotReachable;
        }

        public static bool IsWiFi() {
            return Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork;
        }

        public static bool IsCellular() {
            return Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork;
        }

3. unity 호출 ios 원생 인터페이스 1) unity 호출 ios 방법 실현
using System;
using UnityEngine;
using System.Runtime.InteropServices;


public class Platform {
#if UNITY_IPHONE
    [DllImport("__Internal")]
    public static extern void __OpenSystemTimeSetting();
    [DllImport("__Internal")]
    public static extern void __TelPhoneNumber(string str);
    [DllImport("__Internal")]
    public static extern bool _IsHadInstalledWeixin();
    [DllImport("__Internal")]
    public static extern string __GetDeviceVersion(); 
#endif
    public static DeviceGeneration GetiOSDeviceGeneration() {
        string str = GetIphoneVersion();
        switch (str) {
            case "iPhone1,1":
                return DeviceGeneration.iPhone;
            case "iPhone1,2":
                return DeviceGeneration.iPhone3G;
            case "iPhone2,1":
                return DeviceGeneration.iPhone3GS;
            case "iPhone3,1":
            case "iPhone3,2":
            case "iPhone3,3":
                return DeviceGeneration.iPhone4;
            case "iPhone4,1":
                return DeviceGeneration.iPhone4S;
            case "iPhone5,1":
            case "iPhone5,2":
                return DeviceGeneration.iPhone5;
            case "iPhone5,3":
            case "iPhone5,4":
                return DeviceGeneration.iPhone5C;
            case "iPhone6,1":
            case "iPhone6,2":
                return DeviceGeneration.iPhone5S;
            case "iPhone7,2":
                return DeviceGeneration.iPhone6;
            case "iPhone7,1":
                return DeviceGeneration.iPhone6Plus;
            case "iPhone8,1":
                return DeviceGeneration.iPhone6S;
            case "iPhone8,2":
                return DeviceGeneration.iPhone6SPlus;
            case "iPhone8,4":
                return DeviceGeneration.iPhoneSE1Gen;
            case "iPhone9,1":
            case "iPhone9,3":
                return DeviceGeneration.iPhone7;
            case "iPhone9,2":
            case "iPhone9,4":
                return DeviceGeneration.iPhone7Plus;
            case "iPhone10,1":
            case "iPhone10,4":
                return DeviceGeneration.iPhone8;
            case "iPhone10,2":
            case "iPhone10,5":
                return DeviceGeneration.iPhone8Plus;
            case "iPhone10,3":
            case "iPhone10,6":
                return DeviceGeneration.iPhoneX;
            case "iPad1,1":
                return DeviceGeneration.iPad1Gen;
            case "iPad2,1":
            case "iPad2,2":
            case "iPad2,3":
            case "iPad2,4":
                return DeviceGeneration.iPad2Gen;
            case "iPad3,1":
            case "iPad3,2":
            case "iPad3,3":
                return DeviceGeneration.iPad3Gen;
            case "iPad3,4":
            case "iPad3,5":
            case "iPad3,6":
                return DeviceGeneration.iPad4Gen;
            case "iPad4,1":
            case "iPad4,2":
            case "iPad4,3":
                return DeviceGeneration.iPadAir1;
            case "iPad5,3":
            case "iPad5,4":
                return DeviceGeneration.iPadAir2;
            case "iPad6,7":
            case "iPad6,8":
                return DeviceGeneration.iPadPro1Gen;
            case "iPad6,3":
            case "iPad6,4":
                return DeviceGeneration.iPadPro10Inch1Gen;
            case "iPad7,1":
            case "iPad7,2":
                return DeviceGeneration.iPadPro2Gen;
            case "iPad7,3":
            case "iPad7,4":
                return DeviceGeneration.iPadPro10Inch2Gen;
            case "iPad2,5":
            case "iPad2,6":
            case "iPad2,7":
                return DeviceGeneration.iPadMini1Gen;
            case "iPad4,4":
            case "iPad4,5":
            case "iPad4,6":
                return DeviceGeneration.iPadMini2Gen;
            case "iPad4,7":
            case "iPad4,8":
            case "iPad4,9":
                return DeviceGeneration.iPadMini3Gen;
            case "iPad5,1":
            case "iPad5,2":
                return DeviceGeneration.iPadMini4Gen;
            case "iPod1,1":
                return DeviceGeneration.iPodTouch1Gen;
            case "iPod2,1":
                return DeviceGeneration.iPodTouch2Gen;
            case "iPod3,1":
                return DeviceGeneration.iPodTouch3Gen;
            case "iPod4,1":
                return DeviceGeneration.iPodTouch4Gen;
            case "iPod5,1":
                return DeviceGeneration.iPodTouch5Gen;
            case "iPod7,1":
                return DeviceGeneration.iPodTouch6Gen;
            default:
                return DeviceGeneration.Unknown;
        }
    }

    public static string GetIphoneVersion() {
#if !UNITY_EDITOR
#if !UNITY_ANDROID
            return __GetDeviceVersion();
#endif
#endif
        return "";
    }

    public static void OpenSystemSetting() {
#if !UNITY_EDITOR
#if UNITY_IPHONE
        __OpenSystemTimeSetting();
#elif UNITY_ANDROID
        callAndroidFunc("OpenSystemTimeSetting");
#endif
#endif
    }

    public static string GetChannel() {
#if !UNITY_EDITOR
#if UNITY_ANDROID
            return callAndroidFunc<string>("GetChannel");
#else
            return "App Store";
#endif
#else
        return "Editor";
#endif
    }

    public static void TelPhoneNumber(string phoneNumber) {
#if !UNITY_EDITOR
#if UNITY_IPHONE
            //__TelPhoneNumber(phoneNumber);
#elif UNITY_ANDROID
            callAndroidFunc("TelPhoneNumber",phoneNumber);
#endif
#endif
    }

    public static bool IsWeixinAvailable() {
        try {
#if !UNITY_EDITOR
#if UNITY_IPHONE
                        return _IsHadInstalledWeixin();
//                      return true;
#elif UNITY_ANDROID
                        return callAndroidFunc<bool>("isWeixinAvilable");
#else

#endif
#endif
            return true;

        } catch (Exception e) {
            LogException(e);
        }
        return false;
    }

    public static string GetDeviceBrand() {
#if !UNITY_EDITOR
#if UNITY_ANDROID
                    return callAndroidFunc<string>("GetDeviceBrand");
#else
                    return "Apple";
#endif
#endif
        return "MacOS";
    }

    public static string GetSoucre() {
        try {
#if UNITY_IPHONE
            return "iOS";
#elif UNITY_ANDROID
            return "android";
#else
                return "iOS";
#endif
        } catch (Exception e) {
            LogException(e);
        }
        return string.Empty;
    }

    public static string GetVersion() {
        return Application.version;
    }

    public static string GetOSVersion() {
        return SystemInfo.operatingSystem;
    }

    public static string GetDeviceModel() {
        return SystemInfo.deviceModel;
    }

    public static bool IsIpx() {
#if UNITY_IPHONE
            if (GetiOSDeviceGeneration() == DeviceGeneration.iPhoneX) {
                return true;
            }
            return false;           
#else
        return false;
#endif
    }

    public static bool IsIPad() {
#if UNITY_IPHONE
            if (GetiOSDeviceGeneration () == DeviceGeneration.iPad1Gen
               || GetiOSDeviceGeneration () == DeviceGeneration.iPad2Gen
               || GetiOSDeviceGeneration () == DeviceGeneration.iPad3Gen
               || GetiOSDeviceGeneration () == DeviceGeneration.iPad4Gen
               || GetiOSDeviceGeneration () == DeviceGeneration.iPadAir1
               || GetiOSDeviceGeneration () == DeviceGeneration.iPadAir2
               || GetiOSDeviceGeneration () == DeviceGeneration.iPadPro1Gen
               || GetiOSDeviceGeneration () == DeviceGeneration.iPadPro10Inch1Gen
               || GetiOSDeviceGeneration () == DeviceGeneration.iPadPro2Gen
               || GetiOSDeviceGeneration () == DeviceGeneration.iPadPro10Inch2Gen
               || GetiOSDeviceGeneration () == DeviceGeneration.iPadMini1Gen
               || GetiOSDeviceGeneration () == DeviceGeneration.iPadMini2Gen
               || GetiOSDeviceGeneration () == DeviceGeneration.iPadMini3Gen
               || GetiOSDeviceGeneration () == DeviceGeneration.iPadMini4Gen) {
                return true;
            }
            return false;
#else
        return false;
#endif
    }

    private static T callAndroidFunc(string funName, params object[] args) {
        try {
           using (AndroidJavaClass jcla = new AndroidJavaClass("com.Platform")) {
               using (AndroidJavaObject instance = jcla.CallStatic("getInstance")) {
                   return instance.Call(funName, args);
               }
           }
        } catch (Exception e) {
           LogException(e);
        }
        return default(T);
    }

    private static void callAndroidFunc(string funName, params object[] args) {
        try {
           using (AndroidJavaClass jcla = new AndroidJavaClass("com.Platform")) {
               using (AndroidJavaObject instance = jcla.CallStatic("getInstance")) {
                   instance.Call(funName, args);
               }
           }
        } catch (Exception e) {
           LogException(e);
        }
    }
}

2) ios 방법의 실현

#import "OpenSetting.h"

@implementation OpenSetting

@end

extern "C" {
    void __OpenSystemTimeSetting()
    {
        NSURL * url = [NSURL URLWithString: UIApplicationOpenSettingsURLString];
        if ( [[UIApplication sharedApplication] canOpenURL: url] ) {
            NSURL*url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
            [[UIApplication sharedApplication] openURL:url];
        }
    }

    void __TelPhoneNumber(char* cPhoneNum){
        if (cPhoneNum == nullptr) {
            return;
        }
        NSString *phoneNum = [NSString stringWithUTF8String:cPhoneNum];
        if (phoneNum == nil) {
            return;
        }
        NSString *callPhone = [NSString stringWithFormat:@"telprompt://%@", phoneNum];
        if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
            /// 10      
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone] options:@{} completionHandler:nil];
        } else {
            /// 10    
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone]];
        }
    }

    bool _IsHadInstalledWeixin(){
        NSURL * url1 = [NSURL URLWithString:@"weixin://"];
        NSURL * url2 = [NSURL URLWithString:@"Whatapp://"];
        if ([[UIApplication sharedApplication] canOpenURL:url1] ||
            [[UIApplication sharedApplication] canOpenURL:url2]) {
            return true;
        }
        return false;
    }
}


여기서 xcode를 포장하면 됩니다

좋은 웹페이지 즐겨찾기