Flutter增强现实开发插件jmap_ar_sdk的使用

Flutter增强现实开发插件jmap_ar_sdk的使用

本Flutter插件将增强现实(AR)功能与Jibestream室内地图集成。在设置过程中,你需要对iOS和Android平台进行特定的配置以设置Jibestream SDK。请遵循以下步骤确保你的Flutter应用程序正确配置。

前提条件

  • Flutter SDK(最新稳定版本)
  • Xcode(用于iOS开发)
  • Android Studio(用于Android开发)
  • CocoaPods(用于iOS依赖管理)

安装

要安装该插件,请将其添加到你的Flutter项目的pubspec.yaml文件中:

dependencies:
  jmap_ar_sdk: ^1.2.0

然后运行以下命令以获取包:

flutter pub get

iOS配置

iOS配置需要对你的AppDelegate.swift文件进行一些本地代码更改。请按以下步骤操作:

  1. 在Xcode中打开你的Flutter项目,导航到ios目录并打开Runner.xcworkspace文件。
  2. AppDelegate.swift文件的didFinishLaunchingWithOptions方法中,添加以下代码:
let options: [String: String] = [
    "GOOGLE_APP_ID": "",
    "GCM_SENDER_ID": "",
    "API_KEY": "",
    "PROJECT_ID": "",
    "DATABASE_URL": "",
    "STORAGE_BUCKET": ""
]

UserSDK.configure(with: options)

你还可以添加以下辅助函数来读取GoogleService-Info.plist文件:

func getGoogleServiceInfo() -> [String: String]? {
    // 直接从主包中访问GoogleService-Info.plist文件
    guard let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist"),
          let plistData = NSDictionary(contentsOfFile: filePath) as? [String: Any] else {
        print("Failed to load GoogleService-Info.plist")
        return nil
    }

    // 从plist数据中检索所需键值
    let keysToExtract = ["GOOGLE_APP_ID", "GCM_SENDER_ID", "API_KEY", "PROJECT_ID", "DATABASE_URL", "STORAGE_BUCKET"]
    var googleServiceInfoDict: [String: String] = [:]

    for key in keysToExtract {
        if let value = plistData[key] as? String {
            googleServiceInfoDict[key] = value
        }
    }

    return googleServiceInfoDict
}
  1. 确保将GoogleService-Info.plist文件添加到你的Xcode项目中。此文件对于SDK配置是必需的。
  2. 如果你的应用使用了Firebase,请确保在Podfile中添加以下内容:
$FirebaseSDKVersion = '10.29.0' # Google Cloud Anchor仅支持此版本

这行代码应该添加在target 'Runner' do行之前。

Android配置

对于Android,你需要修改MainActivity.kt文件。请按以下步骤操作:

  1. 在Android Studio中打开你的Flutter项目。
  2. android/build.gradle文件中添加以下两行:
maven { url "https://cxapp.jfrog.io/artifactory/android-cxapp/" }
maven { url "https://jitpack.io" }
  1. MainActivity.kt文件中,添加以下代码:
import com.cxapp.sdk.ar.user.ARUserSDK

override fun onCreate(savedInstanceState: Bundle?) {
    val dataConfig = HashMap<String, String>()
    dataConfig["projectId"] = ""
    dataConfig["applicationId"] = ""
    dataConfig["apiKey"] = ""

    ARUserSDK.configure(dataConfig)
    super.onCreate(savedInstanceState)
}
  1. 确保在AndroidManifest.xml文件中包含AR和Jibestream SDK所需的必要权限和依赖项。

Flutter使用

void _startLocalization() {
  final jMapARSDK = JMapARSDK();
  final config = JMapConfig(
      'https://api.jibestream.com',
      '', // Client ID
      '', // Client Secret
      123, // Customer ID
      123, // Venue ID
      123, // Building ID
      123); // Floor ID
  jMapARSDK.startLocalization(config);
}

示例代码

以下是完整的示例代码:

import 'package:flutter/material.dart';
import 'package:jmap_ar_sdk/jmap_ar_sdk.dart';
import 'package:jmap_ar_sdk/jmap_config.dart';

void main() {
  runApp(const MyApp());
}

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _jmapArSdkPlugin = JMapARSDK();

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  void _startLocalization() {
    JMapConfig mapConfig = const JMapConfig(
        "https://api.jibestream.com",
        "", // Client ID
        "", // Client Secret
        123, // Customer ID
        123, // Venue ID
        123, // Building ID
        123); // Floor ID
    _jmapArSdkPlugin.startLocalization(mapConfig);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: _startLocalization,
            child: const Text('Start Localization'),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter增强现实开发插件jmap_ar_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter增强现实开发插件jmap_ar_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


jmap_ar_sdk 是一个用于 Flutter 的增强现实(AR)开发插件,允许开发者在 Flutter 应用中集成 AR 功能。以下是如何使用 jmap_ar_sdk 的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 jmap_ar_sdk 依赖。

dependencies:
  flutter:
    sdk: flutter
  jmap_ar_sdk: ^latest_version

然后运行 flutter pub get 来获取依赖。

2. 配置 Android 和 iOS 项目

由于 AR 功能通常需要使用原生平台的 AR 框架(如 ARKit 和 ARCore),因此你需要在 Android 和 iOS 项目中进行一些配置。

Android 配置

android/app/build.gradle 文件中,确保 minSdkVersion 至少为 24(Android 7.0):

android {
    defaultConfig {
        minSdkVersion 24
    }
}

iOS 配置

ios/Podfile 中,确保 platform :ios 至少为 11.0:

platform :ios, '11.0'

3. 初始化 AR 场景

在你的 Flutter 应用中,首先需要初始化 AR 场景。

import 'package:jmap_ar_sdk/jmap_ar_sdk.dart';

void initARScene() async {
  bool isARSupported = await JMapArSdk.isARSupported();
  if (isARSupported) {
    JMapArSdk.initialize();
  } else {
    print("AR is not supported on this device.");
  }
}

4. 显示 AR 视图

使用 JMapArView 来显示 AR 场景。

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

class ARScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('AR View'),
      ),
      body: JMapArView(
        onViewCreated: (JMapArController controller) {
          // You can use the controller to interact with the AR scene
        },
      ),
    );
  }
}

5. 与 AR 场景交互

你可以使用 JMapArController 来与 AR 场景进行交互,例如添加 3D 模型、处理手势等。

JMapArController _arController;

void onViewCreated(JMapArController controller) {
  _arController = controller;

  // Add a 3D model to the AR scene
  _arController.addModel(
    modelPath: 'assets/models/example.glb',
    position: Vector3(0, 0, -1),
    scale: Vector3(0.1, 0.1, 0.1),
  );

  // Handle tap events
  _arController.onTap = (Vector3 position) {
    print("Tapped at position: $position");
  };
}

6. 处理生命周期

确保在应用的生命周期中正确处理 AR 场景的暂停和恢复。

@override
void dispose() {
  _arController.dispose();
  super.dispose();
}

@override
void didChangeAppLifecycleState(AppLifecycleState state) {
  switch (state) {
    case AppLifecycleState.paused:
      _arController.pause();
      break;
    case AppLifecycleState.resumed:
      _arController.resume();
      break;
    default:
      break;
  }
}

7. 运行应用

最后,运行你的 Flutter 应用,你应该能够在设备上看到 AR 场景,并与之进行交互。

void main() {
  runApp(MaterialApp(
    home: ARScreen(),
  ));
}
回到顶部