隐私合规接口

本文档介绍插件的隐私合规接口及其调用时机。国内应用上架需确保用户同意隐私协议后才能初始化地图 SDK。


合规要求

根据工信部等监管要求,国内应用在用户同意隐私协议前,不得初始化涉及用户隐私的 SDK。腾讯地图 SDK 在此要求下,默认不渲染地图,直到应用显式声明用户已同意隐私协议。


API 说明

// 1. 设置用户已同意隐私协议
await TencentMapInitializer.setAgreePrivacy(true);

// 2. 启动 SDK
await TencentMapInitializer.start();
方法 参数 说明
setAgreePrivacy(agree) bool true 表示用户已同意隐私协议,SDK 可正常初始化;false 表示未同意,地图不渲染
start() 启动腾讯地图 SDK。必须在 setAgreePrivacy 之后调用;

调用时机

必须在 TencentMap Widget 渲染之前调用。通常放在 main() 函数中:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 用户已同意隐私协议(根据你的业务逻辑判断)
  final isPrivacyAgreed = await checkPrivacyAgreement();
  await TencentMapInitializer.setAgreePrivacy(isPrivacyAgreed);
  await TencentMapInitializer.start();
  
  runApp(const MyApp());
}

完整示例

import 'package:flutter/material.dart';
import 'package:flutter_tencent_map/flutter_tencent_map.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // TODO: 替换为你的隐私协议判断逻辑
  // 例如:SharedPreferences 读取用户是否已同意
  final isAgreed = await _checkPrivacyAgreement();
  
  await TencentMapInitializer.setAgreePrivacy(isAgreed);
  await TencentMapInitializer.start();
  
  runApp(const MyApp());
}

Future<bool> _checkPrivacyAgreement() async {
  // 示例:从 SharedPreferences 读取
  // final prefs = await SharedPreferences.getInstance();
  // return prefs.getBool('privacy_agreed') ?? false;
  return true; // 示例中直接返回 true
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: TencentMap(
          initialCameraPosition: const CameraPosition(
            target: LatLng(39.9087, 116.3975),
            zoom: 12,
          ),
        ),
      ),
    );
  }
}

注意事项

  • 调用顺序:必须先调用 setAgreePrivacy(true),再调用 start(),最后才能创建 TencentMap Widget。
  • 默认值:未调用 setAgreePrivacy 时,默认 agree = false,地图不会渲染。
本页内容