C# 通过插件在Unity中使用Apple idfa
我从另一个堆栈溢出答案中借用了以下代码: 例如.mmC# 通过插件在Unity中使用Apple idfa,c#,ios,xcode,C#,Ios,Xcode,我从另一个堆栈溢出答案中借用了以下代码: 例如.mm const char* getIdfa() { if([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) { NSString * idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; //return (
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?[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]);
只需2美分的捐款。现在您可以通过以下方式获得IDFA(或android的GAID):
此外,该方法还返回一个布尔值,如果成功,则指示true;如果当前平台不支持广告标识符,则指示false。同意,如果使用Unity 5.3或更高版本,则更好。当这个问题最初发布时,这不是一个保证,但现在,是的,这可能是更好的答案。
Application.RequestAdvertisingIdentifierAsync(
(string advertisingId, bool trackingEnabled, string error) =>
Debug.Log("advertisingId " + advertisingId + " " + trackingEnabled + " " + error)
);