C# 通过插件在Unity中使用Apple idfa

C# 通过插件在Unity中使用Apple idfa,c#,ios,xcode,C#,Ios,Xcode,我从另一个堆栈溢出答案中借用了以下代码: 例如.mm const char* getIdfa() { if([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) { NSString * idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; //return (

我从另一个堆栈溢出答案中借用了以下代码:

例如.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?

[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)
);