Unity端
新建个脚本,然后绑定到一个对象上,脚本代码如下,这片代码我就不多说了,不懂得自己
去看下iOS和Unity的互调。弄完后导出IOS工程。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Runtime.InteropServices;//Must be Definedpublic class GetIdentertyControl : MonoBehaviour {// Use this for initializationpublic Text IDFA;public Text DisplayName;public Text DeviceModel;[DllImport("__Internal")]private static extern void _GetIDFA ();public void GetIDFA(string str){if (string.IsNullOrEmpty(str)) {Debug.Log("IDFA is NULL");return;}IDFA.text = str;}[DllImport("__Internal")]private static extern void _GetDisplayName ();public void GetDisplayName(string str){if (string.IsNullOrEmpty(str)) {Debug.Log("DisplayName is NULL");return;}DisplayName.text = str;}[DllImport("__Internal")]private static extern void _GetDeviceModel ();public void GetDeviceModel(string str){if (string.IsNullOrEmpty(str)) {Debug.Log("DeviceModel is NULL");return;}DeviceModel.text = str;}public void OnClickButton(){if(Application.platform != RuntimePlatform.OSXEditor){_GetIDFA();_GetDeviceModel();_GetDisplayName();}}
}
IOS端
- 先新建个OC的类吧,然后把官方的KeychainItemWrapper代码拷贝进去。然后在CompileSources中选中该类 添加-fno-objc-arc。
- 导入两个包
- Security.framework
- AdSupport.framework
- 然后再新建一个类,来使用之前导入的
KeychainItemWrapper:
#import "NinjaUUID.h" #import "KeychainItemWrapper.h" #include <sys/types.h> #include <sys/sysctl.h>#define APP_IDENTIFIER @"zhujingjing@bccv.com"@implementation NinjaUUID+(NSString*) uuid {CFUUIDRef puuid = CFUUIDCreate( nil );CFStringRef uuidString = CFUUIDCreateString( nil, puuid );NSString * result = (NSString *)CFBridgingRelease(CFStringCreateCopy( NULL, uuidString));CFRelease(puuid);CFRelease(uuidString);return result; }+(void) saveToKeyChain {NSString *uuid = [self uuid];KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:APP_IDENTIFIER accessGroup:nil];[wrapper setObject:uuid forKey:(__bridge id)kSecValueData];}+(NSString*) getUUIDFromKeyChain {KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:APP_IDENTIFIER accessGroup:nil];NSString *password = [wrapper objectForKey:(__bridge id)kSecValueData];return password; }+ (NSString *)getCurrentDeviceModel {int mib[2];size_t len;char *machine;mib[0] = CTL_HW;mib[1] = HW_MACHINE;sysctl(mib, 2, NULL, &len, NULL, 0);machine = malloc(len);sysctl(mib, 2, machine, &len, NULL, 0);NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];free(machine);//iPhoneif ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G (A1203)";if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G (A1241/A1324)";if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS (A1303/A1325)";if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4 (A1332)";if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4 (A1332)";if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (A1349)";if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S (A1387/A1431)";if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (A1428)";if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (A1429/A1442)";if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone5c (A1456/A1532)";if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (A1507/A1516/A1526/A1529)";if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (A1453/A1533)";if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (A1457/A1518/A1528/A1530)";if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6 (A1549/A1586)";if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus (A1522/A1524)";if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s (A1633/A1688/A1691/A1700)";if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus (A1634/A1687/A1690/A1699)";//iPod Touchif ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch (A1213)";if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G (A1288)";if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G (A1318)";if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G (A1367)";if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G (A1421/A1509)";if ([platform isEqualToString:@"iPod7,1"]) return @"iPod Touch 6G (A1574)";//iPadif ([platform isEqualToString:@"iPad1,1"]) return @"iPad (A1219/A1337)";if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2 (A1395)";if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2 (A1396)";if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2 (A1397)";if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2 (A1395+New Chip)";if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3 (A1416)";if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3 (A1403)";if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3 (A1430)";if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4 (A1458)";if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4 (A1459)";if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4 (A1460)";//iPad Airif ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air (A1474)";if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air (A1475)";if ([platform isEqualToString:@"iPad4,3"]) return @"iPad Air (A1476)";if ([platform isEqualToString:@"iPad5,3"]) return @"iPad Air 2 (A1566)";if ([platform isEqualToString:@"iPad5,4"]) return @"iPad Air 2 (A1567)";//iPad miniif ([platform isEqualToString:@"iPad2,5"]) return @"iPad mini 1G (A1432)";if ([platform isEqualToString:@"iPad2,6"]) return @"iPad mini 1G (A1454)";if ([platform isEqualToString:@"iPad2,7"]) return @"iPad mini 1G (A1455)";if ([platform isEqualToString:@"iPad4,4"]) return @"iPad mini 2 (A1489)";if ([platform isEqualToString:@"iPad4,5"]) return @"iPad mini 2 (A1490)";if ([platform isEqualToString:@"iPad4,6"]) return @"iPad mini 2 (A1491)";if ([platform isEqualToString:@"iPad4,7"]) return @"iPad mini 3 (A1599)";if ([platform isEqualToString:@"iPad4,8"]) return @"iPad mini 3 (A1600)";if ([platform isEqualToString:@"iPad4,9"]) return @"iPad mini 3 (A1601)";if ([platform isEqualToString:@"iPad5,1"]) return @"iPad mini 4 (A1538)";if ([platform isEqualToString:@"iPad5,2"]) return @"iPad mini 4 (A1550)";if ([platform isEqualToString:@"i386"]) return @"iPhone Simulator";if ([platform isEqualToString:@"x86_64"]) return @"iPhone Simulator";return platform; }+ (NSString *)getDisplayName{NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];CFShow(infoDictionary);// app名称NSString *app_Name = [infoDictionary objectForKey:@"CFBundleDisplayName"];return app_Name; }@end
再新建个类,这个类就是和Unity进行消息互换的。#import "InteractiveToUnity.h" #import "NinjaUUID.h" #import <AdSupport/AdSupport.h>@implementation InteractiveToUnityvoid _GetIDFA (){const char* gameObject = "Main Camera";const char* functionname = "GetIDFA";NSString *str = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];UnitySendMessage(gameObject, functionname, [str UTF8String]); };/* void _GetVerdorid (){const char* gameObject = "Main Camera";const char* functionname = "GetVerdorid";NSString *str=[NinjaUUID getUUIDFromKeyChain];if(str == nil || [str isEqual: @""]){[NinjaUUID saveToKeyChain];str = [NinjaUUID getUUIDFromKeyChain];}UnitySendMessage(gameObject, functionname, [str UTF8String]); }; */void _GetDeviceModel(){const char* gameObject = "Main Camera";const char* functionname = "GetDeviceModel";NSString *str=[NinjaUUID getCurrentDeviceModel];UnitySendMessage(gameObject, functionname, [str UTF8String]); }void _GetDisplayName(){const char* gameObject = "Main Camera";const char* functionname = "GetDisplayName";NSString *str=[NinjaUUID getDisplayName];UnitySendMessage(gameObject, functionname, [str UTF8String]); }@end