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

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

Uygulamanızı AR Required (AR Gerekli) veya AR Optional (AR İsteğe Bağlı) olarak yapılandırma

Tüm AR özellikleri, bağımsız cihazlarda yer kazanmak için Play Store tarafından ayrı olarak güncellenen AR için Google Play Hizmetleri adlı bir uygulamada saklanı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 Required (AR Zorunlu) ve AR Optional (AR İsteğe Bağlı). Bu tanımlama, artırılmış gerçeklik uygulaması : AR uygulamasının AR için Google Play Hizmetleri uygulamasıyla nasıl etkileşim kuracağını belirler.

AR Required (AR Gerekli) uygulamalar, ARCore olmadan çalışamaz. Bu özellik için ARCore'u destekleyen ve AR için Google Play Hizmetleri'nin yüklü olduğu bir cihaz gerekir.

  • Google Play Store, ARCore'u destekleyen cihazlarda yalnızca AR Required uygulamalarını kullanıma sunar.
  • Kullanıcılar AR Required uygulaması yüklediğinde Google Play Store, AR için Google Play Hizmetleri'ni cihazlarına otomatik olarak yükler. Ancak AR için Google Play Hizmetleri güncel değilse veya manuel olarak kaldırılmışsa uygulamanızın ek çalışma zamanı kontrolleri yapması gerekir.

AR İsteğe Bağlı uygulamalar, mevcut işlevleri geliştirmek için ARCore'u kullanır. AR için Google Play Hizmetleri'nin yüklü olduğu ve ARCore'un desteklendiği cihazlarda etkinleştirilen isteğe bağlı AR özellikleri vardır.

  • AR isteğe bağlı uygulamalar, ARCore'u desteklemeyen cihazlara yüklenebilir ve bu cihazlarda çalıştırılabilir.
  • Kullanıcılar AR İsteğe Bağlı bir uygulama yüklediğinde Google Play Store, AR için Google Play Hizmetleri'ni cihaza otomatik olarak yüklemez.
AR GerekliAR İsteğe Bağlı
AR özelliğinin kullanımı Uygulamanızın temel işlevleri için ARCore'a ihtiyacı var. ARCore, uygulamanızın işlevselliğini artırır. Uygulamanız ARCore desteği olmadan çalışabilir.
Play Store'da görünürlük Uygulamanız yalnızca ARCore'u destekleyen cihazlarda Play Store'da listelenir. Uygulamanız normal listeleme prosedürlerine uygundur.
AR için Google Play Hizmetleri yükleme yöntemi Play Store, AR için Google Play Hizmetleri'ni uygulamanızla birlikte yükler. Uygulamanız, ARCore'u indirmek ve yüklemek için ArCoreApk.requestInstall() iznini kullanıyor.
Android minSdkVersion gereksinimleri Android 7.0 (API düzeyi 24) Android 4.4 (API düzeyi 19) ancak herhangi bir AR işlevinin çalışması 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 Required veya AR Optional yapmak için AndroidManifest.xml dosyanızı aşağıdaki girişleri içerecek şekilde güncelleyin:

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>

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 dosyasını değiştirerek en az 24 sürümündeki minSdkVersion özelliğini belirtin:

 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ında Google'ın Maven deposunun bulunduğundan emin olun.

    allprojects {
        repositories {
            google()
            
        }
    }
    
  2. Uygulamanızın build.gradle dosyasında bağımlılık olarak en yeni ARCore kitaplığını ekleyin.

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

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

Çalışma zamanında, uygulamanızdaki AR özelliklerinin sorunsuz şekilde çalışmasını sağlamak için aşağıdakileri yapın.

ARCore'un desteklenip desteklenmediğini kontrol etme

Hem AR Required hem de AR Optional 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 Required uygulamanızla birlikte yüklense de desteklenmeyen cihazlara sahip kullanıcılar bu hizmeti 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(), cihazın ARCore'u destekleyip desteklemediğini belirlemek için ağ kaynaklarını sorgulaması gerekebilir. Bu süre boyunca UNKNOWN_CHECKING döndürülür. Algılanan gecikmeyi ve pop-in'i azaltmak için uygulamalar, sorguyu başlatmak üzere yaşam döngüsünün başlarında ArCoreApk.checkAvailability() işlevini bir kez çağırmalı ve döndürülen değeri yoksaymalıdır. Bu sayede, AR giriş kullanıcı arayüzü öğesi gösterildiğinde önbelleğe alınmış sonuç hemen kullanılabilir.

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

Hem AR Required hem de AR Optional uygulamaları, ARCore oturumu oluşturmadan önce ArCoreApk.requestInstall() kullanarak AR için Google Play Hizmetleri'nin uyumlu bir sürümünün (hâlâ) yüklü olup olmadığını kontrol etmeli ve gerekli tüm ARCore cihaz profili verilerinin indirildiğinden emin olmalı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 isteyin

Hem AR Optional hem de AR Required 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ğinizde onRequestPermissionsResult() de 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ı Gizliliği Şartlarına Uyma

Uygulamanızı Play Store'da yayınlamak için ARCore'un Kullanıcı Gizliliği Şartları'na uygun olduğundan emin olun.

Sırada ne var?