Android uygulamanızda artırılmış gerçekliği (AR) etkinleştirme

Artırılmış gerçeklik özelliklerini yeni veya mevcut uygulamanızda kullanmak için AR'yi etkinleştirin.

Uygulamanızı AR Zorunlu veya AR İsteğe Bağlı olacak şekilde yapılandırın

Her bir cihazda alandan tasarruf etmek amacıyla, tüm AR özellikleri, Play Store tarafından ayrı olarak güncellenen AR için Google Play Hizmetleri adlı bir uygulamada depolanır. AR özelliklerini kullanan Android uygulamaları, ARCore SDK'sını kullanarak AR için Google Play Hizmetleri ile iletişim kurar. AR özelliklerini destekleyen bir uygulama iki şekilde yapılandırılabilir: AR Zorunlu ve İsteğe Bağlı. Bu tanımlama, uygulamanın AR için Google Play Hizmetleri uygulamasıyla nasıl etkileşimde bulunduğunu belirler.

AR Zorunlu uygulamaları, ARCore olmadan çalışamaz. AR için Google Play Hizmetleri'nin yüklü olduğu, ARCore destekli bir cihaz gerektirir.

  • Google Play Store, ARCore uygulamaları yalnızca ARCore'u destekleyen cihazlarda kullanıma sunacaktır.
  • Kullanıcılar AR için Gerekli bir uygulamayı yüklediklerinde, Google Play Store, AR için Google Play Hizmetleri'ni cihazlarına otomatik olarak yükler. Ancak, AR için Google Play Hizmetleri'nin eski olması veya yüklemesinin manuel olarak kaldırılmış olması durumunda uygulamanızın yine de ek çalışma zamanı kontrolleri gerçekleştirmesi gerekir.

İsteğe bağlı artırılmış gerçeklik (AR) uygulamaları, mevcut işlevleri geliştirmek için ARCore'u kullanır. Yalnızca AR için Google Play Hizmetleri'nin yüklü olduğu, ARCore destekli cihazlarda etkinleştirilen isteğe bağlı AR özelliklerine sahiptir.

  • İsteğe bağlı AR uygulamaları, ARCore'u desteklemeyen cihazlara yüklenip çalıştırılabilir.
  • Kullanıcılar isteğe bağlı bir AR uygulaması yüklediğinde Google Play Store, cihaza AR için Google Play Hizmetleri'ni otomatik olarak yüklemez.
Artırılmış Gerçeklik (AR) GerekliArtırılmış Gerçeklik (AR) İsteğe Bağlı
Artırılmış Gerçeklik (AR) Özelliğinin kullanımı Uygulamanızın temel işlevi için ARCore uygulaması gereklidir. ARCore, uygulamanızın işlevselliğini artırır. Uygulamanız ARCore desteği olmadan çalışabilir.
Play Store görünürlüğü Uygulamanız yalnızca ARCore'u destekleyen cihazlardaki Play Store'da listelenir. Uygulamanızda normal giriş prosedürleri kullanılıyor.
AR için Google Play Hizmetleri yükleme yöntemi Play Store, uygulamanızın yanı sıra AR için Google Play Hizmetleri'ni yükler. Uygulamanız, ARCore'u indirip yüklemek için ArCoreApk.requestInstall() kullanıyor.
Android minSdkVersion gereksinimleri Android 7.0 (API Düzeyi 24) Android 4.4 (API Düzeyi 19), ancak AR işlevlerinin çalıştırılması için en az Android 7.0 (API Düzeyi 24) gerekir
ARCore desteğini ve yükleme durumunu kontrol etmek için ArCoreApk.checkAvailability() veya ArCoreApk.checkAvailabilityAsync() kullanılmalıdır
AR için Google Play Hizmetleri'ni yüklemek üzere ArCoreApk.requestInstall() kullanılmalıdır

Uygulamanızı AR Zorunlu veya İsteğe Bağlı hale getirmek için AndroidManifest.xml öğenizi aşağıdaki girişleri içerecek şekilde güncelleyin:

Artırılmış Gerçeklik (AR) Gerekli

<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>

Artırılmış Gerçeklik (AR) İsteğe Bağlı

<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>

Ardından, uygulamanızın build.gradle değerini, minSdkVersion değerini en az 24 olarak belirtecek şekilde değiştirin:

 android {
     defaultConfig {
         …
         minSdkVersion 24
     }
 }

Derleme bağımlılıkları ekleme

Android Studio projenize ARCore'u eklemek için aşağıdakileri yapın:

  1. Projenizin build.gradle dosyasının Google'ın Maven deposunu içerdiğinden emin olun.

    allprojects {
        repositories {
            google()
            …
        }
    }
    
  2. En son ARCore kitaplığını uygulamanızın build.gradle dosyasına bağımlılık olarak ekleyin.

    dependencies {
        …
        implementation 'com.google.ar:core:1.33.0'
    }
    

Çalışma zamanı kontrolleri gerçekleştirme

Uygulamanızdaki AR özelliklerinin sorunsuz çalışmasını sağlamak için çalışma sırasında aşağıdakileri yapın.

ARCore'un desteklenip desteklenmediğini kontrol etme

Hem AR Zorunlu hem de AR İsteğe Bağlı uygulamalar, mevcut cihazın ARCore'u destekleyip desteklemediğini belirlemek için ArCoreApk.checkAvailability() veya ArCoreApk.checkAvailabilityAsync() kullanmalıdır. ARCore'u desteklemeyen cihazlarda, uygulamalar AR ile ilgili işlevleri devre dışı bırakmalı ve ilişkili kullanıcı arayüzü öğelerini gizlemelidir.

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)

  // Enable AR-related functionality on ARCore supported devices only.
  maybeEnableArButton()
  …
}

fun maybeEnableArButton() {
  ArCoreApk.getInstance().checkAvailabilityAsync(this) { availability ->
    if (availability.isSupported) {
      mArButton.visibility = View.VISIBLE
      mArButton.isEnabled = true
    } else { // The device is unsupported or unknown.
      mArButton.visibility = View.INVISIBLE
      mArButton.isEnabled = false
    }
  }
}

Java

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  // Enable AR-related functionality on ARCore supported devices only.
  maybeEnableArButton();
  …
}

void maybeEnableArButton() {
  ArCoreApk.getInstance().checkAvailabilityAsync(this, availability -> {
    if (availability.isSupported()) {
      mArButton.setVisibility(View.VISIBLE);
      mArButton.setEnabled(true);
    } else { // The device is unsupported or unknown.
      mArButton.setVisibility(View.INVISIBLE);
      mArButton.setEnabled(false);
    }
  });
}
AR için Google Play Hizmetleri, AR için Zorunlu uygulamanızla birlikte yüklenmiş olsa da, desteklenmeyen cihazlara sahip kullanıcılar bu uygulamayı harici bir kaynaktan yükleyebilir. ARCore desteğini kontrol etmek için ArCoreApk.checkAvailability() veya ArCoreApk.checkAvailabilityAsync() kullanmak tutarlı bir deneyim sağlar.

ArCoreApk.checkAvailability() uygulamasının, cihazın ARCore'u destekleyip desteklemediğini belirlemek için ağ kaynaklarını sorgulaması gerekebilir. Bu süre zarfında UNKNOWN_CHECKING değerini döndürecektir. Uygulamalar, algılanan gecikmeyi ve pop-in'i azaltmak amacıyla, döndürülen değeri yoksayarak sorguyu başlatmak için yaşam döngüsünün başlarında bir kez ArCoreApk.checkAvailability()'i çağırmalıdır. Bu şekilde, artırılmış gerçeklik (AR) giren bir kullanıcı arayüzü öğesi görüntülenirken önbelleğe alınmış bir sonuç hemen kullanılabilir hale gelir.

AR için Google Play Hizmetleri'nin yüklü olup olmadığını kontrol etme

AR için Google Play Hizmetleri'nin uyumlu bir sürümünün (hâlâ) yüklü olup olmadığını kontrol etmek ve gerekli tüm ARCore cihaz profili verilerinin indirildiğinden emin olmak amacıyla, bir ARCore oturumu oluşturmadan önce hem AR için Zorunlu hem de AR İsteğe Bağlı Uygulamalarda, ArCoreApk.requestInstall() kullanılmalıdır.

Kotlin

// requestInstall(Activity, true) will triggers installation of
// Google Play Services for AR if necessary.
var mUserRequestedInstall = true

override fun onResume() {
  super.onResume()

  // Check camera permission.
  …

  // Ensure that Google Play Services for AR and ARCore device profile data are
  // installed and up to date.
  try {
    if (mSession == null) {
      when (ArCoreApk.getInstance().requestInstall(this, mUserRequestedInstall)) {
        ArCoreApk.InstallStatus.INSTALLED -> {
          // Success: Safe to create the AR session.
          mSession = Session(this)
        }
        ArCoreApk.InstallStatus.INSTALL_REQUESTED -> {
          // When this method returns `INSTALL_REQUESTED`:
          // 1. ARCore pauses this activity.
          // 2. ARCore prompts the user 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. ARCore resumes this activity. The next invocation of
          //    requestInstall() will either return `INSTALLED` or throw an
          //    exception if the installation or update did not succeed.
          mUserRequestedInstall = false
          return
        }
      }
    }
  } catch (e: UnavailableUserDeclinedInstallationException) {
    // Display an appropriate message to the user and return gracefully.
    Toast.makeText(this, "TODO: handle exception " + e, Toast.LENGTH_LONG)
        .show()
    return
  } catch (…) {
    …
    return  // mSession remains null, since session creation has failed.
  }
  …
}

Java

// requestInstall(Activity, true) will trigger installation of
// Google Play Services for AR if necessary.
private boolean mUserRequestedInstall = true;

@Override
protected void onResume() {
  super.onResume();

  // Check camera permission.
  …

  // Ensure that Google Play Services for AR and ARCore device profile data are
  // installed and up to date.
  try {
    if (mSession == null) {
      switch (ArCoreApk.getInstance().requestInstall(this, mUserRequestedInstall)) {
        case INSTALLED:
          // Success: Safe to create the AR session.
          mSession = new Session(this);
          break;
        case INSTALL_REQUESTED:
          // When this method returns `INSTALL_REQUESTED`:
          // 1. ARCore pauses this activity.
          // 2. ARCore prompts the user 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. ARCore resumes this activity. The next invocation of
          //    requestInstall() will either return `INSTALLED` or throw an
          //    exception if the installation or update did not succeed.
          mUserRequestedInstall = false;
          return;
      }
    }
  } catch (UnavailableUserDeclinedInstallationException e) {
    // Display an appropriate message to the user and return gracefully.
    Toast.makeText(this, "TODO: handle exception " + e, Toast.LENGTH_LONG)
        .show();
    return;
  } catch (…) {
    …
    return;  // mSession remains null, since session creation has failed.
  }
  …
}

Kamera izni iste

Hem AR İsteğe Bağlı hem de AR Zorunlu uygulamaları, AR Oturumu oluşturmadan önce kamera izninin verildiğinden emin olmalıdır.

Kotlin

override fun onResume() {
  super.onResume()

  // ARCore requires camera permission to operate.
  if (!CameraPermissionHelper.hasCameraPermission(this)) {
    CameraPermissionHelper.requestCameraPermission(this)
    return
  }

  …
}

Java

@Override
protected void onResume() {
  super.onResume();

  // ARCore requires camera permission to operate.
  if (!CameraPermissionHelper.hasCameraPermission(this)) {
    CameraPermissionHelper.requestCameraPermission(this);
    return;
  }

  …
}

AR etkinliğiniz de onRequestPermissionsResult() uygulanmalıdır.

Kotlin

override fun onRequestPermissionsResult(
  requestCode: Int,
  permissions: Array<String>,
  results: IntArray
) {
  super.onRequestPermissionsResult(requestCode, permissions, results)
  if (!CameraPermissionHelper.hasCameraPermission(this)) {
    Toast.makeText(this, "Camera permission is needed to run this application", Toast.LENGTH_LONG)
      .show()
    if (!CameraPermissionHelper.shouldShowRequestPermissionRationale(this)) {
      // Permission denied with checking "Do not ask again".
      CameraPermissionHelper.launchPermissionSettings(this)
    }
    finish()
  }
}

Java

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] results) {
  super.onRequestPermissionsResult(requestCode, permissions, results);
  if (!CameraPermissionHelper.hasCameraPermission(this)) {
    Toast.makeText(this, "Camera permission is needed to run this application", Toast.LENGTH_LONG)
        .show();
    if (!CameraPermissionHelper.shouldShowRequestPermissionRationale(this)) {
      // Permission denied with checking "Do not ask again".
      CameraPermissionHelper.launchPermissionSettings(this);
    }
    finish();
  }
}

Kullanıcı Gizlilik Şartlarına Uyma

Uygulamanızı Play Store'da yayınlamak için uygulamanızın ARCore'un Kullanıcı Gizlilik Şartları'na uyduğundan emin olun.

Sonraki adımlar