Tích hợp trải nghiệm AR bản Web.
-
Tài liệu này giới thiệu Xense AR bản Web, cho phép tích hợp tính năng của Xense AR với ứng dụng bên thứ 3 sử dụng Webview.
-
Trong phiên bản hiện tại, Web AR SDK hỗ trợ:
- Sử dụng dịch vụ VPS (Visual Positioning Service) tại các địa điểm đã đăng ký.
- Hiển thị các nội dung AR cơ bản ở định dạng GLB, GLTF và Image.
- Sử dụng tính năng Chỉ đường AR (AR Navigation).
-
Hỗ trợ tích hợp với project Flutter, React Native và Native
1. Flutter Project
- Truy cập Template tích hợp cho Flutter project để tải về (template này đã chứa các package cần thiết cho việc tích hợp).
- Follow hướng dẫn trong README file cho Flutter project
2. React Native Project
- Truy cập Template tích hợp cho React Native project để tải về (template này đã chứa các package cần thiết cho việc tích hợp).
- Follow hướng dẫn trong README file cho React Native project .
3. Native Project
Android project
Tải Template project trước khi bắt đầu
- Mở file
AndroidManifest.xml, bổ sung khai báo sau:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<!-- ... -->
<queries>
<intent>
<action android:name="android.support.customtabs.action.CustomTabsService" />
</intent>
</queries>
<!-- ... -->
<application>
<!-- ... -->
</application>
</manifest>- Thêm dependency vào
build.gradlecủa app.
plugins {
<!-- ... -->
}
android {
<!-- ... -->
}
dependencies {
implementation("androidx.browser:browser:1.8.0")
<!-- ... -->
}- Tạo một class mới tên
TwaManager, có nội dung copy từ Template project. - Để mở trải nghiệm AR, tạo một instance của TwaManager
- Chạy AR sử dụng hàm
launchARcủa TwaManager, nhận đầu vào các tham sốworldID: lấy tương ứng trong PortalblockID: lấy tương ứng trong PortalmodelScale: lấy tương ứng trong PortalindexUrl: được cung cấp bởi Xensecommand: optional - để trống nếu không cần bắt đầu luồng chỉ đường ngay lập tứclocationID: optional - thông tin bổ sung cho command
iOS project
Tải Template project trước khi bắt đầu
- Tạo file
XenseARManager.swiftvà copy nội dung file từ Template project - Add framework
XenseARWebGLtừ Template project, đổi Embed option thànhEmbed & Sign - Thêm package
https://github.com/weichsel/ZIPFoundationtrongFrameworks, Libraries, and Embedded Content - Để mở trải nghiệm AR, sử dụng class
XenseARManager
- Chạy AR sử dụng hàm
launchARcủa XenseARManager, nhận đầu vào các tham sốworldID: lấy tương ứng trong PortalblockID: lấy tương ứng trong PortalmodelScale: lấy tương ứng trong PortalindexUrl: được cung cấp bởi Xensecommand: optional - để trống nếu không cần bắt đầu luồng chỉ đường ngay lập tứclocationID: optional - thông tin bổ sung cho command
4. Mở trải nghiệm AR bên ngoài ứng dụng
-
Nếu không muốn tích hợp module AR vào ứng dụng của bạn, bạn có thể thực hiện mở tính năng AR thông qua Appclip (trên iOS), hoặc trình duyệt Chrome (trên Android)
-
Hướng dẫn trên Flutter Project: thêm dependency
url_launcher, tiến hành mở link với các tham số được cung cấp bởi Xense. Phía dưới là đoạn code minh họa việc mở ứng dụng AR trên Flutter Project.import 'dart:io'; import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { const String worldID = 'blossom'; const String blockID = '3e2a6da2-e248-4dd7-9f09-d5ffbaa17b31'; const String command = 'data~eyJ0eXBlIjoic3RhcnROYXZpZ2F0aW9uIiwibG9jYXRpb25JRCI6IjkwMTcwZGIxLWQ5NTgtNDkyYy04NmNhLTI3NDIyMGQ2NmI3NiJ9'; const String indexUrl = 'cdn.xensear.vn/custom-frontend/threejs_production/benhvienbachmai/HLOCTracking.html'; String experienceUrlIOS = 'https://appclip.apple.com/id' '?p=com.viettel.mhmp.ARWorld.Clip' '&worldID=$worldID' '&blockID=$blockID' '&command=$command' '&indexUrl=$indexUrl'; String experienceUrlAndroid = 'https://$indexUrl' '?worldID=$worldID' '&blockID=$blockID' '&command=$command' '&indexUrl=$indexUrl'; // Đường dẫn phía trên do Xense cung cấp. Future<void> _openARExperience() async { if (Platform.isAndroid) { experienceUrl = androidExperienceUrl; } final Uri url = Uri.parse(experienceUrl); if (Platform.isAndroid) { await launchUrl( url, mode: LaunchMode.externalApplication, ); } else { if (await canLaunchUrl(url)) { await launchUrl( url, mode: LaunchMode.externalApplication, ); } else { print("Could not launch AR Experience"); } } } @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold( appBar: AppBar(title: Text("Open AR Experience")), body: Center( child: ElevatedButton( onPressed: _openARExperience, child: Text("Open AR Experience"), ), ), ), ); } } -
Hướng dẫn trên React Native Project: tiến hành mở link với các tham số được cung cấp bởi Xense. Phía dưới là đoạn code minh họa việc mở ứng dụng AR trên React Native Project.
import { View, Button, StyleSheet, Platform, Alert } from 'react-native';
import * as Linking from 'expo-linking';
export default function HomeScreen() {
const worldID = "mhmp_blossom";
const blockID = "3e2a6da2-e248-4dd7-9f09-d5ffbaa17b31";
const command = "data~eyJ0eXBlIjoic3RhcnROYXZpZ2F0aW9uIiwibG9jYXRpb25JRCI6IjkwMTcwZGIxLWQ5NTgtNDkyYy04NmNhLTI3NDIyMGQ2NmI3NiJ9";
const indexUrl = "cdn.xensear.vn/custom-frontend/threejs_production/benhvienbachmai/HLOCTracking.html";
const experienceUrlIOS =
`https://appclip.apple.com/id?p=com.viettel.mhmp.ARWorld.Clip` +
`&worldID=${worldID}` +
`&blockID=${blockID}` +
`&command=${command}` +
`&indexUrl=${indexUrl}`;
const experienceUrlAndroid =
`https://${indexUrl}` +
`?worldID=${worldID}` +
`&blockID=${blockID}` +
`&command=${command}` +
`&indexUrl=${indexUrl}`;
const openARExperience = async () => {
const url =
Platform.OS === 'android'
? experienceUrlAndroid
: experienceUrlIOS;
const supported = await Linking.canOpenURL(url);
if (!supported) {
Alert.alert('Error', 'Could not open AR Experience');
return;
}
await Linking.openURL(url);
};
return (
<View style={styles.container}>
<Button title="Open AR Experience" onPress={openARExperience} />
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1, justifyContent: 'center', alignItems: 'center' },
});