Flutter如何获取OAID

在Flutter项目中需要获取设备的OAID(匿名设备标识符),但官方插件库中没有找到直接支持的插件。请问有哪些可行的方案或第三方插件可以实现这个功能?具体该如何集成和使用?需要注意哪些兼容性或权限问题?

2 回复

在Flutter中获取OAID,需使用第三方插件如oaid_flutter。步骤如下:

  1. pubspec.yaml中添加依赖:oaid_flutter: ^版本号
  2. 运行flutter pub get
  3. 在代码中导入并使用插件获取OAID。

注意:仅支持Android平台,需在AndroidManifest.xml中配置相关权限。

更多关于Flutter如何获取OAID的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在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');

注意事项:

  1. 权限:确保AndroidManifest.xml已添加必要的权限:
    <uses-permission android:name="com.asus.msa.action.OPEN_ID" />
    
  2. 兼容性:OAID仅适用于国内Android设备,国外设备可能返回null。
  3. 异步处理:获取OAID是异步操作,需正确处理回调。

通过以上步骤,即可在Flutter应用中获取设备的OAID。

回到顶部