Table of Contents

Memeriksa ketersediaan sesi dan dukungan perangkat

Sebelum memulai AR, biasanya perlu memeriksa apakah sesi tersedia dan apakah perangkat saat ini mendukung fitur AR yang dibutuhkan. Artikel ini menjelaskan cara melakukan pemeriksaan ini.

Sebelum memulai

Mendapatkan laporan selama proses peluncuran

Jika sesi langsung diluncurkan setelah perakitan, laporan sesi dapat diperoleh melalui peristiwa StateChanged.

Perlu berlangganan peristiwa StateChanged sebelum sesi dimulai, biasanya aman dilakukan di Awake():

void Awake()
{
    Session.StateChanged += HandleSessionStateChange;
}

Status sesi yang perlu diperhatikan dalam penanganan peristiwa meliputi: Ready dan Broken. Status Ready menunjukkan sesi telah berhasil dimulai, yang berarti sesi tersedia di perangkat saat ini. Status Broken menunjukkan sesi gagal dimulai, yang berarti sesi tidak tersedia di perangkat saat ini.

Status Broken tidak selalu muncul saat perangkat tidak didukung. Jadi, gunakan SessionReport.BrokenReason untuk mendapatkan alasan kegagalan spesifik.

void HandleSessionStateChange(ARSession.SessionState status)
{
    if (status == ARSession.SessionState.Ready)
    {
        // sesi tersedia di perangkat saat ini
    }
    else if (status == ARSession.SessionState.Broken)
    {
        // sesi tidak tersedia di perangkat saat ini
        if (Session.Report.BrokenReason == SessionReport.SessionBrokenReason.NoAvailabileFrameSource ||
            Session.Report.BrokenReason == SessionReport.SessionBrokenReason.FrameFilterNotAvailabile)
        {
            // komponen yang dipilih tidak didukung oleh perangkat saat ini
        }
        else
        {
            // alasan tidak terkait perangkat
        }
    }
}

Alasan SessionReport.SessionBrokenReason.NoAvailabileFrameSource dan SessionReport.SessionBrokenReason.FrameFilterNotAvailabile menunjukkan komponen sesi tidak tersedia di perangkat saat ini; alasan lain biasanya tidak terkait perangkat. Secara ketat, kedua alasan ini berarti fitur AR dalam konfigurasi saat ini (dan hanya konfigurasi ini) tidak dapat berjalan di perangkat tersebut. Konfigurasi mengacu pada fitur dan pengaturan yang dipilih di objek sesi. Laporan ketersediaan rinci dapat diperoleh dari Report.

Untuk kasus SessionReport.SessionBrokenReason.NoAvailabileFrameSource, sesi mungkin pulih secara otomatis jika perangkat ditemukan didukung saat memperbarui daftar perangkat selama peluncuran sesi dengan koneksi internet.

Mengambil laporan sebelum peluncuran

Jika ingin membuat penilaian sebelum sesi dimulai dan memutuskan apakah akan meluncurkan sesi berdasarkan situasi spesifik, Anda dapat memanggil Assemble() secara manual dan menggunakan peristiwa AssembleUpdate untuk mendapatkan laporan ketersediaan komponen.

Perlu berlangganan peristiwa AssembleUpdate sebelum perakitan sesi,

Session.AssembleUpdate += OnAssembleUpdate;

Pada tahap pertama perakitan, Anda masih dapat menggunakan ARSession.SessionState dan Report untuk menilai dukungan sesi. Namun laporan tahap kedua tidak akan diperbarui ke sesi.

Oleh karena itu, saat memanggil Assemble() secara manual, Anda perlu menangani laporan ketersediaan komponen dalam peristiwa AssembleUpdate untuk menentukan apakah sesi tersedia di perangkat saat ini.

Perhatikan baik-baik ketersediaan komponen dalam daftar SessionReport.AvailabilityReport.FrameSources. Jika ada komponen frame source yang tersedia, maka bagian SessionReport.AvailabilityReport.FrameSources tersedia di perangkat saat ini.

Anda juga perlu memperhatikan ketersediaan komponen dalam daftar SessionReport.AvailabilityReport.FrameFilters dalam laporan. Namun standar penilaian bervariasi berdasarkan opsi perakitan, yang mungkin mengharuskan semua frame filter tersedia, atau sejumlah frame filter tersedia. Secara default, semua frame filter harus tersedia.

Dalam konfigurasi default, kode berikut dapat digunakan untuk menentukan apakah komponen sesi tersedia di perangkat saat ini:

void OnAssembleUpdate(SessionReport.AvailabilityReport report)
{
    if (report.FrameSources.Any(f => f.Availability == SessionReport.AvailabilityReport.AvailabilityStatus.Available) &&
        report.FrameFilters.All(f => f.Availability == SessionReport.AvailabilityReport.AvailabilityStatus.Available))
    {
        Session.AssembleUpdate -= OnAssembleUpdate;
        // komponen sesi tersedia di perangkat saat ini, dapat memulai sesi
        Session.StartSession();
    }
    else
    {
        // komponen sesi tidak tersedia di perangkat saat ini
    }
    if (report.PendingDeviceList.Count <= 0)
    {
        Session.AssembleUpdate -= OnAssembleUpdate;
    }
}

Perhatikan bahwa peristiwa AssembleUpdate mungkin dipicu dua kali. Dalam contoh kode di atas, langganan peristiwa dibatalkan setelah mengonfirmasi komponen tersedia.

Metode penilaian ini tidak dapat mendeteksi kesalahan lain yang mungkin terjadi selama peluncuran sesi, tetapi kesalahan ini biasanya tidak terkait perangkat. Jika diperlukan, penilaian tambahan dapat dilakukan setelah memulai sesi melalui peristiwa StateChanged.

Pilihan saat komponen sesi tidak tersedia

Dalam pengembangan aplikasi, umumnya diinginkan untuk memberikan dukungan kompatibilitas ke sebanyak mungkin perangkat. Oleh karena itu, saat komponen sesi tidak tersedia di perangkat saat ini, pertimbangkan beberapa pilihan berikut:

  • Downgrade menggunakan fitur AR lain
    Ubah konfigurasi komponen sesi, pilih fitur AR yang didukung perangkat saat ini. Lihat membuat sesi untuk mempelajari cara mengubah konfigurasi komponen sesi.

  • Memberikan pengalaman non-AR
    Saat komponen sesi tidak tersedia, berikan pengalaman non-AR. Misalnya, dalam skenario navigasi, jika navigasi AR tidak dapat diwujudkan, menyediakan navigasi 2D tradisional sangat berguna.

  • Memberi tahu pengguna untuk mengganti perangkat
    Dalam beberapa skenario aplikasi, pengguna mungkin menggunakan perangkat yang tidak mendukung fitur AR. Anda dapat memberi tahu pengguna untuk mengganti perangkat demi pengalaman yang lebih baik.

Saat memilih skema ini, pertimbangkan kebutuhan spesifik aplikasi dan basis pengguna. Dalam aplikasi AR, jika beberapa perangkat benar-benar tidak dapat menyediakan AR atau opsi downgrade, tetap perlu memberikan pesan informasi pengguna yang baik agar pengguna memahami batasan perangkat saat ini.

Langkah selanjutnya