uni-app IOS 原生获取IDFV IDFA

uni-app IOS 原生获取IDFV IDFA

群里面一个朋友让我帮忙翻译的

Object-c代码如下:

NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];  
NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

注:下面的IDFA等同于adid

console.log('UUID:'+plus.device.uuid)  
console.log('important')  
var NSUUID = plus.ios.importClass('NSUUID');  
var UIDevice = plus.ios.importClass("UIDevice");  
var currentDevice = UIDevice.currentDevice()  
var identifierForVendor = currentDevice.identifierForVendor().UUIDString();  
console.log('IDFV:'+identifierForVendor)  

var ASIdentifierManager = plus.ios.importClass('ASIdentifierManager');  
var sharedManager = ASIdentifierManager.sharedManager();  
var IDFA = sharedManager.advertisingIdentifier().UUIDString();  
console.log('IDFA:'+IDFA);

经过网友测试有效可用,代码没有优化,偷懒直接importClass,有意思的伙伴自己用invoke处理即可。

转载本文记得备注出处,谢谢。


更多关于uni-app IOS 原生获取IDFV IDFA的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app IOS 原生获取IDFV IDFA的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 中获取 iOS 设备的 IDFV(Identifier For Vendor)和 IDFA(Identifier For Advertising),通常需要借助原生代码扩展。这是因为 uni-app 本身是一个跨平台的框架,直接提供对原生 API 的访问能力有限。因此,我们需要通过编写自定义的原生插件来实现这一功能。

以下是一个基本的示例,展示了如何在 iOS 平台上通过原生代码获取 IDFV 和 IDFA,并在 uni-app 中调用这些原生方法。

iOS 原生代码部分

  1. 创建自定义插件:在 uni-app 项目的 native-plugins 目录下创建一个新的插件目录(例如 MyIDPlugin)。

  2. 在插件目录中创建 MyIDPlugin.hMyIDPlugin.m 文件

MyIDPlugin.h

#import <Foundation/Foundation.h>
#import <UniAppPlugin.h>

@interface MyIDPlugin : NSObject<UniModule>

- (void)getIDFV:(UniJSCallback *)callback;
- (void)getIDFA:(UniJSCallback *)callback;

@end

MyIDPlugin.m

#import "MyIDPlugin.h"
#import <AdSupport/AdSupport.h>

@implementation MyIDPlugin

- (void)getIDFV:(UniJSCallback *)callback {
    NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
    callback(@[idfv]);
}

- (void)getIDFA:(UniJSCallback *)callback {
    if ([ASIdentifierManager isAdvertisingTrackingEnabled]) {
        NSString *idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
        callback(@[idfa]);
    } else {
        callback(@[@"Tracking is disabled"]);
    }
}

@end
  1. 注册插件:在 uni-app 项目的 manifest.json 中注册该插件。

uni-app 调用原生插件

uni-app 的 JavaScript 代码中,你可以通过 uni.requireNativePlugin 方法调用原生插件。

const myIDPlugin = uni.requireNativePlugin('MyIDPlugin');

// 获取 IDFV
myIDPlugin.getIDFV((res) => {
    console.log('IDFV:', res[0]);
});

// 获取 IDFA
myIDPlugin.getIDFA((res) => {
    console.log('IDFA:', res[0]);
});

注意事项

  • 获取 IDFA 需要用户同意广告追踪,因此在实际应用中,应确保用户已授权广告追踪。
  • 提交应用至 App Store 时,确保你的应用使用 IDFA 的目的是符合 Apple 的隐私政策的,否则可能会被拒绝。
  • 上述代码仅作示例,实际开发中应根据具体需求进行错误处理和边界情况的处理。
回到顶部