我从另一个堆栈溢出答案中借用了这段代码:
example.mm
const char* getIdfa()
{
if([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled])
{
NSString * idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
//return (const char*)[idfa UTF8String]; // ##### malloc error I uncomment this line #####
}
return nil;
}
iOSplugin.cs
#if UNITY_IOS
[DllImport("__Internal")]
public static extern string getIdfa();
#endif
Xcode构建可能影响问题的设置: 项目格式:xcode 3.1兼容 Obj-C自动参考计数:是
如果我取消注释这一行:
return (const char*)[fdsa UTF8String];
然后我收到以下错误:
(531,0x19e9ef000) malloc: *** error for object 0x1357d44e1: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
有一些名为cocoaToMonoString的函数的引用可以解决这个问题,但是我找不到任何关于它的例子或文档。
如何将Xcode中的字符串返回Unity?
答案 0 :(得分:3)
只需两美分的贡献。
现在您可以使用Application.RequestAdvertisingIdentifierAsync获取IDFA(或Android的GAID):
Application.RequestAdvertisingIdentifierAsync(
(string advertisingId, bool trackingEnabled, string error) =>
Debug.Log("advertisingId " + advertisingId + " " + trackingEnabled + " " + error)
);
此方法返回一个布尔值,表示成功时为true;如果当前平台不支持广告标识符,则返回false。
答案 1 :(得分:1)
[idfa UTF8String] 这是对NSString内部字节数组的引用。 它无法传递回Unity / C#。
添加此功能:
static const char* MakeStringCopy(const char* string)
{
if (string == NULL)
return NULL;
char* res = (char*)malloc(strlen(string) + 1);
strcpy(res, string);
return res;
}
并返回:
return MakeStringCopy([idfa UTF8String]);