เปิดใช้ AR เพื่อใช้ฟีเจอร์ Augmented Reality ในแอปใหม่หรือที่มีอยู่
กำหนดค่าแอปเป็น "ต้องใช้ AR" หรือ "ไม่บังคับให้ใช้ AR"
ฟีเจอร์ AR ทั้งหมดจะจัดเก็บไว้ในแอปชื่อ Google Play Services สำหรับ AR ซึ่ง Play Store จะอัปเดตแยกต่างหากเพื่อประหยัดพื้นที่ในอุปกรณ์แต่ละเครื่อง แอป Android ที่ใช้ฟีเจอร์ AR จะสื่อสารกับบริการ Google Play สำหรับ AR โดยใช้ ARCore SDK แอปที่รองรับฟีเจอร์ AR สามารถกําหนดค่าได้ 2 วิธี ได้แก่ AR ต้องระบุและ AR ไม่บังคับ การกำหนดนี้จะกำหนดวิธีที่แอปโต้ตอบกับแอปบริการ Google Play สำหรับ AR
แอปที่ต้องใช้ AR จะใช้งานไม่ได้หากไม่มี ARCore โดยต้องใช้อุปกรณ์ที่รองรับ ARCore ซึ่งติดตั้งบริการ Google Play สำหรับ AR แล้ว
- Google Play Store จะแสดงแอปที่ต้องใช้ AR บนอุปกรณ์ที่รองรับ ARCore เท่านั้น
- เมื่อผู้ใช้ติดตั้งแอปที่ต้องใช้ AR ทาง Google Play Store จะติดตั้งบริการ Google Play สำหรับ AR ในอุปกรณ์ของผู้ใช้โดยอัตโนมัติ อย่างไรก็ตาม แอปของคุณยังคงต้องทำการตรวจสอบรันไทม์เพิ่มเติมในกรณีที่บริการ Google Play สำหรับ AR เป็นเวอร์ชันเก่าหรือถูกถอนการติดตั้งด้วยตนเอง
แอปAR ไม่บังคับใช้ ARCore เพื่อเพิ่มประสิทธิภาพฟังก์ชันการทำงานที่มีอยู่ โดยจะมีฟีเจอร์ AR ที่ไม่บังคับซึ่งจะเปิดใช้งานในอุปกรณ์ที่รองรับ ARCore และติดตั้งบริการ Google Play สำหรับ AR ไว้เท่านั้น
- แอป AR ไม่บังคับจะติดตั้งและใช้งานในอุปกรณ์ที่ไม่รองรับ ARCore ได้
- เมื่อผู้ใช้ติดตั้งแอป AR ไม่บังคับ Google Play Store จะไม่ติดตั้งบริการ Google Play สำหรับ AR ในอุปกรณ์โดยอัตโนมัติ
ต้องระบุ AR | ไม่บังคับให้ใช้ AR | |
---|---|---|
การใช้ฟีเจอร์ AR | แอปของคุณต้องใช้ ARCore เพื่อฟังก์ชันพื้นฐาน | ARCore ช่วยเสริมฟังก์ชันการทำงานของแอป แอปของคุณจะทำงานได้โดยไม่ต้องรองรับ ARCore |
ระดับการเข้าถึง Play Store | แอปจะแสดงใน Play Store เฉพาะในอุปกรณ์ที่รองรับ ARCore | แอปของคุณเป็นไปตามกระบวนการแสดงข้อมูลปกติ |
วิธีติดตั้งบริการ Google Play สำหรับ AR | Play Store จะติดตั้งบริการ Google Play สำหรับ AR ควบคู่ไปกับแอปของคุณ | แอปของคุณใช้
ArCoreApk.requestInstall()
เพื่อดาวน์โหลดและติดตั้ง ARCore |
ข้อกำหนดของ Android minSdkVersion |
Android 7.0 (API ระดับ 24) | Android 4.4 (API ระดับ 19) แต่การเรียกใช้ฟังก์ชัน AR ใดๆ ต้องใช้ Android 7.0 เป็นอย่างน้อย (API ระดับ 24) |
ต้องใช้ ArCoreApk_checkAvailability() หรือ ArCoreApk_checkAvailabilityAsync() เพื่อตรวจสอบการรองรับและสถานะการติดตั้ง ARCore
|
||
ต้องใช้
ArCoreApk.requestInstall()
เพื่อติดตั้งบริการ Google Play สำหรับ AR |
หากต้องการทำให้แอปเป็น AR ที่จำเป็นหรือ AR ไม่บังคับ ให้อัปเดต AndroidManifest.xml
ให้รวมรายการต่อไปนี้
<uses-permission android:name="android.permission.CAMERA" />
<!-- Limits app visibility in the Google Play Store to ARCore supported devices
(https://developers.google.com/ar/devices). -->
<uses-feature android:name="android.hardware.camera.ar" />
<application …>
…
<!-- "AR Required" app, requires "Google Play Services for AR" (ARCore)
to be installed, as the app does not include any non-AR features. -->
<meta-data android:name="com.google.ar.core" android:value="required" />
</application>
<uses-permission android:name="android.permission.CAMERA" />
<!-- If your app was previously AR Required, don't forget to remove the
`<uses-feature android:name="android.hardware.camera.ar" />` entry, as
this would limit app visibility in the Google Play Store to only
ARCore supported devices. -->
<application …>
…
<!-- "AR Optional" app, contains non-AR features that can be used when
"Google Play Services for AR" (ARCore) is not available. -->
<meta-data android:name="com.google.ar.core" android:value="optional" />
</application>
จากนั้นแก้ไข build.gradle
ของแอปเพื่อระบุ minSdkVersion
เป็นอย่างน้อย 24
โดยทำดังนี้
android {
defaultConfig {
…
minSdkVersion 24
}
}
เพิ่มการพึ่งพิงบิวด์
ตรวจสอบว่าไฟล์
build.gradle
ของโปรเจ็กต์มีที่เก็บ Maven ของ Googleallprojects { repositories { google() … } }
เพิ่มงานที่กำหนดเองลงในไฟล์
build.gradle
ของโมดูลเพื่อแยกไลบรารีแบบเนทีฟที่รวมไว้ออกจากไฟล์ AAR ของ ARCore วิธีนี้ช่วยให้อ้างอิงได้โดยตรงในโปรเจ็กต์ C หรือ C++ในไดเรกทอรี
app/build
ให้กําหนดตัวแปรไปยังไดเรกทอรีที่จะแยกไลบรารีที่มาพร้อมเครื่องสร้างการกำหนดค่า Gradle เพื่อเก็บข้อมูลและงานการดึงข้อมูล
/* The ARCore AAR library contains native shared libraries that are extracted before building to a temporary directory. */ def arcore_libpath = "${buildDir}/arcore-native" // Create a configuration to mark which aars to extract .so files from configurations { natives }
สร้างงานเพื่อคัดลอกไลบรารีเนทีฟจากไฟล์ AAR และเพิ่มลงในทรัพยากร Dependency ของบิลด์
// Extracts the shared libraries from AARs in the native configuration // so that NDK builds can access these libraries. task extractNativeLibraries() { // Extract every time. outputs.upToDateWhen { false } doFirst { configurations.natives.files.each { f -> copy { from zipTree(f) into arcore_libpath include "jni/**/*" } } } } tasks.whenTaskAdded { task-> if (task.name.contains("external") && !task.name.contains("Clean")) { task.dependsOn(extractNativeLibraries) } }
กำหนดค่า Flag การสร้างแบบเนทีฟเพื่อส่งตำแหน่งไปยังเครื่องมือสร้างภายนอก
// From the sample app. externalNativeBuild { cmake { cppFlags "-std=c++11", "-Wall" arguments "-DANDROID_STL=c++_static", "-DARCORE_LIBPATH=${arcore_libpath}/jni", "-DARCORE_INCLUDE=${project.rootDir}/../../libraries/include" } }
เพิ่มไลบรารีที่ใช้ร่วมกันทั้งของ Java และเนทีฟ
dependencies { ... // Add Java and native dependencies to the ARCore library. implementation 'com.google.ar:core:1.33.0' natives 'com.google.ar:core:1.33.0' ... }
อ้างอิงไลบรารีที่มาพร้อมเครื่องใน
CMakeLists.txt
# Import the ARCore library. add_library(arcore SHARED IMPORTED) set_target_properties(arcore PROPERTIES IMPORTED_LOCATION ${ARCORE_LIBPATH}/${ANDROID_ABI}/libarcore_sdk_c.so INTERFACE_INCLUDE_DIRECTORIES ${ARCORE_INCLUDE} )
ดำเนินการตรวจสอบรันไทม์
ในระหว่างรันไทม์ ให้ทำตามขั้นตอนต่อไปนี้เพื่อให้แน่ใจว่าฟีเจอร์ AR ในแอปทำงานได้อย่างราบรื่น
ตรวจสอบว่าอุปกรณ์รองรับ ARCore หรือไม่
ทั้งแอป AR ต้องระบุและแอป AR ไม่บังคับควรใช้ArCoreApk_checkAvailability()
หรือ ArCoreApk_checkAvailabilityAsync()
เพื่อระบุว่าอุปกรณ์ปัจจุบันรองรับ ARCore หรือไม่ ในอุปกรณ์ที่ไม่รองรับ ARCore แอปควรปิดใช้ฟังก์ชันการทำงานที่เกี่ยวข้องกับ AR และซ่อนองค์ประกอบ UI ที่เกี่ยวข้อง
แอป Android NDK อาจใช้คลาส Java ArCoreApk
เพื่อตรวจสอบความเข้ากันได้และจัดการการติดตั้งใน ARCore Session API ของ C ดั้งเดิม วิธีนี้อาจง่ายกว่าการใช้ฟังก์ชัน ArCoreApk_
เนื่องด้วยการจัดการข้อผิดพลาดและการโต้ตอบกับอินเทอร์เฟซผู้ใช้จำนวนมากที่เกี่ยวข้อง ทั้งนี้ขึ้นอยู่กับโครงสร้างของแอป
void maybeEnableArButton(JNIEnv env, jobject context) {
// Likely called from Activity.onCreate() of an activity with AR buttons.
ArAvailability availability
ArCoreApk_checkAvailability(env, context, &availability);
if (availability == AR_AVAILABILITY_UNKNOWN_CHECKING) {
// Set a timer to call maybeEnableArButton() again after about 200ms.
}
if (availability == AR_AVAILABILITY_SUPPORTED_NOT_INSTALLED ||
availability == AR_AVAILABILITY_SUPPORTED_APK_TOO_OLD ||
availability == AR_AVAILABILITY_SUPPORTED_INSTALLED) {
// Show or enable the AR button.
} else {
// Hide or disable the AR button.
}
}
ArCoreApk_checkAvailability()
หรือ ArCoreApk_checkAvailabilityAsync()
เพื่อตรวจสอบการรองรับ ARCore จะช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่สอดคล้องกัน
ArCoreApk_checkAvailability()
อาจต้องค้นหาทรัพยากรเครือข่ายเพื่อระบุว่าอุปกรณ์รองรับ ARCore หรือไม่ ในระหว่างนี้ ระบบจะแสดงผล AR_AVAILABILITY_UNKNOWN_CHECKING
หากต้องการลดเวลาในการตอบสนองที่รับรู้และการแสดงป๊อปอัป แอปควรเรียกใช้ ArCoreApk_checkAvailability()
1 ครั้งในช่วงต้นของวงจรเพื่อเริ่มการค้นหา โดยละเว้นค่าที่แสดงผล วิธีนี้จะทำให้ผลลัพธ์ที่แคชไว้พร้อมใช้งานทันทีเมื่อองค์ประกอบ UI สำหรับการเข้าสู่ AR อาจแสดง
ตรวจสอบว่าได้ติดตั้งบริการ Google Play สำหรับ AR แล้ว
ทั้งแอปที่ต้องใช้ AR และแอปที่ไม่ต้องใช้ AR ต้องใช้
ArCoreApk.requestInstall()
ก่อนสร้างเซสชัน ARCore เพื่อตรวจสอบว่า (ยังคง) มีการติดตั้ง Google Play Services สำหรับ AR เวอร์ชันที่เข้ากันได้อยู่หรือไม่ และเพื่อให้แน่ใจว่าได้ดาวน์โหลดข้อมูลโปรไฟล์อุปกรณ์ ARCore ที่จำเป็นทั้งหมดแล้ว
// Tracks if an installation request has already been triggered.
bool install_requested_;
void nativeOnCreate() {
// Do other setup here.
install_requested_ = false;
}
void nativeOnResume(JNIEnv env, jobject activity) {
if (ar_session_ == null) {
bool user_requested_install = !install_requested_;
ArInstallStatus install_status;
// Ensure that Google Play Services for AR and ARCore device profile data are
// installed and up to date.
ArStatus error = ArCoreApk_requestInstall(
env, activity, user_requested_install, &install_status);
if (error != AR_SUCCESS) {
// Inform user of error.
return;
}
switch (install_status) {
case AR_INSTALL_STATUS_INSTALLED:
break;
case AR_INSTALL_STATUS_INSTALL_REQUESTED:
// When this method returns AR_INSTALL_STATUS_INSTALL_REQUESTED:
// 1. This activity will be paused.
// 2. The user is prompted to install or update Google Play
// Services for AR (market://details?id=com.google.ar.core).
// 3. ARCore downloads the latest device profile data.
// 4. This activity is resumed. The next invocation of
// ArCoreApk_requestInstall() will either return
// AR_INSTALL_STATUS_INSTALLED or throw an exception if the
// installation or update did not succeed.
install_requested_ = true;
return;
}
// Request camera permissions.
error = ArSession_create(env, context, &ar_session_);
if (error != AR_SUCCESS) {
// Inform user of error.
return;
}
// Configure the ARCore session.
}
// Normal onResume behavior.
}
ปฏิบัติตามข้อกำหนดด้านความเป็นส่วนตัวของผู้ใช้
หากต้องการเผยแพร่แอปใน Play Store โปรดตรวจสอบว่าแอปของคุณเป็นไปตามข้อกําหนดด้านความเป็นส่วนตัวของผู้ใช้ของ ARCore
สิ่งที่จะเกิดขึ้นหลังจากนี้
- ดูวิธีกำหนดค่าเซสชัน ARCore