Unity与IOS混合编程(二)

unity&ios.jpeg

在unity项目中,如何打开ios app设置页面

  • 首先要用到unity调用ios代码:
    /// 
    /// 打开App设置页面
    /// 
    [DllImport("__Internal")]
    public static extern void OpenAppSettings();
  • 然后在xcode端找到UnityAppController类,在最底部加入代码:
//打开应用设置页面
extern "C" void OpenAppSettings()
{
   NSURL*url=[NSURL URLWithString:UIApplicationOpenSettingsURLString];
   if([[UIApplication sharedApplication]canOpenURL:url]){
       [[UIApplication sharedApplication]openURL:url];
   }
}

可以直接在extern "C" 后面接方法或者:

extern "C" {
    //可以此处定义各种全局变量
     void OpenAppSettings()
     {
       NSURL*url=[NSURL URLWithString:UIApplicationOpenSettingsURLString];
       if([[UIApplication sharedApplication]canOpenURL:url]){
             [[UIApplication sharedApplication]openURL:url];
         }
     }
}

两个方法实现功能一样,第一种简洁,第二种可以在方法体类实现多个方法,定义多个变量,后面我要实现的功能就必须第二种和第一种混合来用。

在unity项目中,如何判断是否获取通知授权

  • 第一步同上,定义unity调用ios的方法名
    /// 
    /// 获取是否有通知权限
    /// 回调函数:JudgeNotifyCallBack
    /// 
    /// 
    [DllImport("__Internal")]
    public static extern void JudgeNotifyPermission();
  • 然后写入oc代码
//判断是否给了通知权限
#import 
extern "C" void JudgeNotifyPermission(){
    if (@available(iOS 10 , *))
    {
            [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
                    if (settings.authorizationStatus == UNAuthorizationStatusDenied ||
                        settings.authorizationStatus == UNAuthorizationStatusNotDetermined)
                    {
                    /// 没有权限
                        UnitySendMessage("IOSCube","JudgeNotifyCallBack","0");
                    } else {
                    ///已经开启通知权限
                        UnitySendMessage("IOSCube","JudgeNotifyCallBack","1");
                    }
            }];
            /// 判断权限执行一次
            UnitySendMessage("IOSCube","JudgeNotifyCallBack","-1");
    }
}
  • 这里需要import一个UserNotifications库,注意在oc++文件中只能用#import引入库,不能用<>,这种会直接报错。另外引入位置尽量提前。

这里用到了ios回调unity方法

UnitySendMessage("IOSCube","JudgeNotifyCallBack","1");

三个参数的含义上一篇文章已经介绍,不再赘述。
编译出错不要慌,先clear,在build。

你可能感兴趣的:(Unity与IOS混合编程(二))