flutter如何获取OAID

在Flutter中如何获取设备的OAID?目前项目需要用到OAID进行统计,但在官方文档中没有找到相关实现方法。请问有没有成熟的插件或方案可以获取OAID?最好能支持Android和iOS平台,如果只能支持Android也可以。另外,获取OAID是否需要特殊权限?希望有经验的大佬分享下具体实现步骤。

2 回复

在Flutter中获取OAID(匿名设备标识符)可以通过以下步骤实现:

  1. 添加依赖:在pubspec.yaml中引入oaid插件:

    dependencies:
      oaid: ^2.0.0
    
  2. 初始化:在main()中调用初始化方法(仅Android需要):

    import 'package:oaid/oaid.dart';
    
    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await OAID.init(); // 初始化SDK
      runApp(MyApp());
    }
    
  3. 获取OAID:在需要的地方调用获取方法:

    String oaid = await OAID.getOAID();
    print("OAID: $oaid");
    

注意

  • 仅支持Android系统,iOS无需此标识。
  • 需在AndroidManifest.xml中添加厂商OAID SDK所需权限和配置(参考插件文档)。
  • 部分国产手机可能无法获取,需处理异常情况。

建议测试不同机型确保兼容性。

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


在Flutter中获取OAID(匿名设备标识符)需要使用原生平台通道调用Android原生代码,因为Flutter本身不提供直接获取OAID的API。以下是实现步骤:

1. 添加OAID SDK依赖

在Android项目的app/build.gradle中添加OAID SDK依赖:

dependencies {
    implementation 'com.github.gzu-liyujiang:MSA_OAID:4.0.3'
}

2. 配置Android原生代码

MainActivity.kt中实现OAID获取逻辑:

import android.content.Context
import com.gyf.immersionbar.ktx.immersionBar
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel

class MainActivity : FlutterActivity() {
    private val CHANNEL = "com.example/oaid"

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
            if (call.method == "getOAID") {
                getOAID(result)
            } else {
                result.notImplemented()
            }
        }
    }

    private fun getOAID(result: MethodChannel.Result) {
        val oaidHelper = OAIDHelper()
        oaidHelper.getOAID(applicationContext, object : OAIDHelper.OAIDCallback {
            override fun onSuccess(oaid: String) {
                result.success(oaid)
            }

            override fun onFail(error: String) {
                result.error("OAID_ERROR", error, null)
            }
        })
    }
}

3. 创建OAIDHelper类

在Android项目中创建OAIDHelper.kt

import android.content.Context
import com.bun.miitmdid.core.MdidSdkHelper
import com.bun.miitmdid.interfaces.IIdentifierListener

class OAIDHelper {
    fun getOAID(context: Context, callback: OAIDCallback) {
        MdidSdkHelper.InitSdk(context, true, object : IIdentifierListener {
            override fun OnSupport(isSupport: Boolean, idSupplier: IdSupplier?) {
                if (isSupport && idSupplier != null) {
                    callback.onSuccess(idSupplier.oaid)
                } else {
                    callback.onFail("OAID not supported")
                }
            }
        })
    }

    interface OAIDCallback {
        fun onSuccess(oaid: String)
        fun onFail(error: String)
    }
}

4. Flutter端调用

在Dart代码中通过平台通道调用:

import 'package:flutter/services.dart';

class OAIDService {
  static const platform = MethodChannel('com.example/oaid');

  static Future<String?> getOAID() async {
    try {
      final String oaid = await platform.invokeMethod('getOAID');
      return oaid;
    } on PlatformException catch (e) {
      print("Failed to get OAID: '${e.message}'");
      return null;
    }
  }
}

// 使用示例
String? oaid = await OAIDService.getOAID();
print('OAID: $oaid');

注意事项:

  1. 权限配置:在AndroidManifest.xml中添加必要的权限
  2. ProGuard规则:如果启用混淆,需要添加对应的keep规则
  3. 厂商支持:OAID的可用性取决于设备厂商支持情况
  4. 异步处理:OAID获取是异步操作,需要正确处理回调

这种方式通过平台通道桥接Flutter和Android原生代码,实现在Flutter应用中获取OAID的功能。

回到顶部