[已删除]
[已删除]
  • 发布:2020-09-28 10:02
  • 更新:2020-11-02 12:10
  • 阅读:3052

【急急急】ios14 如何获取 IDFA

分类:Native.js

我用了官方案例,获取idfa到为空,111可打印,222打印不了

function getIdfa(){  
    var idfa = '';  
    try{  
        if('iOS' == plus.os.name){  
            var manager = plus.ios.invoke('ASIdentifierManager', 'sharedManager');  
            console.log(111)  
            if(plus.ios.invoke(manager, 'isAdvertisingTrackingEnabled')){  
                console.log(222)  
                var identifier = plus.ios.invoke(manager, 'advertisingIdentifier');  
                console.log(identifier)  
                idfa = plus.ios.invoke(identifier, 'UUIDString');  

                plus.ios.deleteObject(identifier);  
            }  
            plus.ios.deleteObject(manager);  
        }  
    }catch(e){  
        console.error('exception in getIdfa@dc-idfa!!');  
    }  
    return idfa;  
}
2020-09-28 10:02 负责人:天生DR 分享
已邀请:
[已删除]

[已删除] (作者)

没有人遇到过吗?

天生DR

天生DR - 天生我材必有用

目前基座云端暂未升级, 所以 isAdvertisingTrackingEnabled 这个API找不到 这是为啥111 有 222 不打印的原因

目前这边建议先使用旧的iDFA的调用方式获取,示例代码如下

var NSUUID = plus.ios.importClass('NSUUID');    
var UIDevice = plus.ios.importClass("UIDevice");    
var currentDevice = UIDevice.currentDevice()    
var identifierForVendor = currentDevice.identifierForVendor().UUIDString();    
var ASIdentifierManager = plus.ios.importClass("ASIdentifierManager");    
var sharedManager = ASIdentifierManager.sharedManager();    
var advertisingIdentifier = sharedManager.advertisingIdentifier();    
var idfa = plus.ios.invoke(advertisingIdentifier,"UUIDString");  
  • [已删除] (作者)

    拿到为00000000-0000-0000-0000-000000000000哦,是我哪里出问题了吗


    var NSUUID = plus.ios.importClass('NSUUID');      
    var UIDevice = plus.ios.importClass("UIDevice");
    var currentDevice = UIDevice.currentDevice()
    var identifierForVendor = currentDevice.identifierForVendor().UUIDString();
    var ASIdentifierManager = plus.ios.importClass("ASIdentifierManager");
    var sharedManager = ASIdentifierManager.sharedManager();
    var advertisingIdentifier = sharedManager.advertisingIdentifier();
    var idfa = plus.ios.invoke(advertisingIdentifier,"UUIDString");
    console.log(idfa) //00000000-0000-0000-0000-000000000000

    2020-09-28 13:43

  • 风云杭州

    果然可以,plus.ios.invoke(manager, 'isAdvertisingTrackingEnabled') 这个方法貌似是有问题的。建议官方的案例修改下,容易引起误导哈

    2020-11-02 13:03

  • 风云杭州

    这个方法可以,为啥这种方式叫 旧的调用方式?

    2020-11-02 17:03

天生DR

天生DR - 天生我材必有用

我这边真机调用时可以的

你再看一下你的环境,包括确认下是否是iOS14 开关是否已经关闭,建议删除手机上已经安装的基座或者App,重新跑一下。

  • 7***@qq.com

    会不会是因为打包配置里面需要额外设置权限描述, 才能弹出授权?我们的应该是可能没有授权idfa的权限

    2020-09-29 12:01

  • 天生DR

    回复 7***@qq.com: 以后是需要的 但是目前是过渡阶段 目前都应该是OK的 我这边试过了 之前也有别的朋友问过 也都可以的

    2020-09-29 12:44

  • 天生DR

    回复 7***@qq.com: 你现在还是不行 是吗?

    2020-09-29 12:44

  • y***@qq.com

    我这边ios14真机调试拿到的也是 00000000-0000-0000-0000-000000000000

    2020-11-27 13:48

  • 天生DR

    回复 y***@qq.com: 怎么取得

    2020-11-27 14:45

  • y***@qq.com

    回复 天生DR:


    /**  
    * https://ask.dcloud.net.cn/question/108039
    * 获取IDFA
    * 仅iOS平台支持
    */
    function getIdfa() {
    let idfa = '';
    try {
    if ('iOS' == plus.os.name) {
    const NSUUID = plus.ios.importClass('NSUUID');
    const UIDevice = plus.ios.importClass("UIDevice");
    const currentDevice = UIDevice.currentDevice()
    const identifierForVendor = currentDevice.identifierForVendor().UUIDString();
    const ASIdentifierManager = plus.ios.importClass("ASIdentifierManager");
    const sharedManager = ASIdentifierManager.sharedManager();
    const advertisingIdentifier = sharedManager.advertisingIdentifier();
    idfa = plus.ios.invoke(advertisingIdentifier,"UUIDString");
    }
    } catch (e) {
    console.error('exception in getIdfa@dc-idfa!!');
    }
    return idfa;
    }

    2020-11-27 14:51

  • 天生DR

    回复 y***@qq.com: 我试了下 是可以的 你看看 你是不是把广告允许关了啊

    2020-11-27 15:04

  • y***@qq.com

    回复 天生DR: 是开启 apple广告 -> 个性化广告 这个选项吗?这个是开着的。

    2020-11-27 15:09

  • 天生DR

    回复 y***@qq.com: 那不应该啊 你看看还有没有 其他机器 看看是否正常

    2020-11-27 15:37

  • [已删除] (作者)

    回复 y***@qq.com: 设置->隐私->跟踪->允许App请求跟踪 把这个打开就行了

    2020-11-28 16:30

  • 吃了个大香瓜

    我在 manifest 文件中,没有配置 "frameworks" : [ "AdSupport.framework" ] 的话,拿到的 idfa 是 00000000-0000-0000-0000-000000000000

    2021-11-02 12:46

  • 风腾网络

    回复 吃了个大香瓜: 兄弟,我加了frameworks" : [ "AdSupport.framework" ] ,还是获取到00000000-0000-0000-0000-000000000000,知道是啥问题吗?

    2021-11-10 17:54

  • 吃了个大香瓜

    回复 3***@qq.com: 这个就不知道了,听说是越狱的是这种的,不过不知道为啥会获取到这种

    2021-11-11 15:31

风云杭州

风云杭州

遇到同样问题了,用以下代码,在ios14下没法取到 idfa

var idfa = '';  
var manager = plus.ios.invoke('ASIdentifierManager', 'sharedManager');    
if(plus.ios.invoke(manager, 'isAdvertisingTrackingEnabled')){    
    var identifier = plus.ios.invoke(manager, 'advertisingIdentifier');    
     idfa = plus.ios.invoke(identifier, 'UUIDString');    
    plus.ios.deleteObject(identifier);    
}    
plus.ios.deleteObject(manager);    
console.log('idfa = '+idfa);
  • 天生DR

    isAdvertisingTrackingEnabled This property is deprecated and will always return No. Functionality has been replaced by the App Tracking Transparency framework. 官方文档所以 这种在iOS14 取不到 苹果给了过渡期 目前用上边的代码可以拿到 新方案大家走在摸索中~

    2020-11-02 18:39

该问题目前已经被锁定, 无法添加新回复