Flutter如何获取OAID
在Flutter项目中需要获取设备的OAID(匿名设备标识符),但官方插件库中没有找到直接支持的插件。请问有哪些可行的方案或第三方插件可以实现这个功能?具体该如何集成和使用?需要注意哪些兼容性或权限问题?
2 回复
在Flutter中获取OAID(匿名设备标识符)需要通过原生平台(Android)实现,因为Flutter本身不提供直接获取OAID的API。以下是具体步骤:
1. 添加依赖
在Android项目的 build.gradle 中添加移动安全联盟(MSA)的OAID SDK依赖:
dependencies {
implementation 'com.github.gzu-liyujiang:MSA_OAID_SDK:4.0.3'
}
2. 原生代码实现
在Android中创建OAID获取工具类:
// OAIDHelper.kt
import com.bun.miitmdid.core.MdidSdkHelper
import com.bun.miitmdid.interfaces.IIdentifierListener
class OAIDHelper(private val context: Context) {
fun getOAID(callback: (String?) -> Unit) {
MdidSdkHelper.InitSdk(context, true, object : IIdentifierListener {
override fun OnSupport(isSupport: Boolean, idSupplier: IdSupplier?) {
if (isSupport && idSupplier != null) {
callback(idSupplier.oaid)
} else {
callback(null)
}
}
})
}
}
3. 创建Flutter插件
MethodChannel调用原生代码:
// oaid_plugin.dart
import 'package:flutter/services.dart';
class OaidPlugin {
static const MethodChannel _channel = MethodChannel('oaid_plugin');
static Future<String?> getOAID() async {
try {
final String? oaid = await _channel.invokeMethod('getOAID');
return oaid;
} on PlatformException {
return null;
}
}
}
Android端实现MethodChannel:
// MainActivity.kt
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
class MainActivity : FlutterActivity() {
private val CHANNEL = "oaid_plugin"
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
if (call.method == "getOAID") {
OAIDHelper(this).getOAID { oaid ->
result.success(oaid)
}
} else {
result.notImplemented()
}
}
}
}
4. 在Flutter中使用
String? oaid = await OaidPlugin.getOAID();
print('OAID: $oaid');
注意事项:
- 权限:确保AndroidManifest.xml已添加必要的权限:
<uses-permission android:name="com.asus.msa.action.OPEN_ID" /> - 兼容性:OAID仅适用于国内Android设备,国外设备可能返回null。
- 异步处理:获取OAID是异步操作,需正确处理回调。
通过以上步骤,即可在Flutter应用中获取设备的OAID。


