Unity Android Çalışma Zamanı İzinleri Yönetmek (Runtime Permissions)

Yayınlandı: 05 Haziran 2018 yasirkula tarafından Oyun Tasarımı, UNITY 3D içinde
Etiketler:, , , , , , , ,

Yine ve yeniden merhabalar,

Bu derste, Android 6.0 ile gelen çalışma zamanı izinleri Unity‘de nasıl kontrol edebileceğinizi göstereceğim. Böylelikle oyun esnasında belli bir izne sahip olup olmadığınızı kontrol edebilecek ve gerekirse izni kullanıcıdan talep edebileceksiniz.

Hazırsanız başlayalım…

Kurulum

Şu adresteki unitypackage‘ı Assets-Import Package yoluyla projenize import edin: https://github.com/yasirkula/UnityAndroidRuntimePermissions/raw/master/RuntimePermissions.unitypackage

Burada opsiyonel bir adım daha var. Unity ile yaptığınız Android oyun ilk açılırken, uygulamanın istediği tüm izinleri topluca talep eden bir diyalog gözükür:

Eğer kullandığınız plugin’ler çalışma zamanı izinleri kendi başlarına destekliyorlarsa veya siz ne zaman hangi izni isteyeceğinizi biliyorsanız, bu diyaloğu gizleyerek oyunun başında kullanıcıların kafasının karışmasını önleyebilirsiniz. Bu şekilde, gerekli izinleri sadece gerektiği zaman isteyerek daha kullanıcı dostu bir deneyim oluşturabilirsiniz.

Bunun için, projenizin Assets/Plugins/Android klasöründe bir AndroidManifest.xml dosyası bulunması gerekiyor. Henüz bir AndroidManifest’iniz yoksa C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer konumundaki Unity’nin varsayılan AndroidManifest.xml dosyasını kopyalayıp (dosya Apk gibi bir alt klasörde de olabilir) projenizin Assets/Plugins/Android klasörüne yapıştırın (Plugins veya Android klasörleri yoksa elle oluşturun).

Ardından AndroidManifest’te <application>...</application> etiketleri arasına şunu yapıştırın:

<meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="true" />

Artık izin diyaloğu oyunun başında gözükmeyecektir.

Kullanım

  • Permission AndroidRuntimePermissions.CheckPermission( string permission )

permission iznine sahip olup olmadığımızı kontrol eder. Kontrol edilebilecek izin listesine şuradan erişebilirsiniz: https://developer.android.com/guide/topics/permissions/overview#permission-groups

Bu izinlerin başına android.permission da eklemeyi unutmayın. Yani örneğin WRITE_EXTERNAL_STORAGE iznini kontrol etmek istiyorsanız, permission’a android.permission.WRITE_EXTERNAL_STORAGE girin. Ayrıca bu izinleri <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> şeklinde AndroidManifest’e de eklemeyi unutmayın; çünkü AndroidManifest’te tanımlı olmayan izinlere erişemezsiniz.

Bu fonksiyon bir AndroidRuntimePermissions.Permission enum‘u döndürür. Eğer ilgili iznimiz varsa bu enum’un değeri Permission.Granted olurken eğer henüz iznimiz yoksa Permission.ShouldAsk olur. Eğer kullanıcı karşısına gelen izin ekranını “Bir daha sorma” seçili bir şekilde reddederse veya kullanıcının cihazında aktif olan bir ebeveyn kontrol sistemi bu iznin verilmesini engelliyorsa, Permission.Denied döndürülür. Bu durumda kullanıcı izni cihazın ayarlar menüsünden elle vermek zorundadır. Böyle bir durumla baş başa kalırsanız, kullanıcıya ayarlar menüsünden izin vermesini söyleyen bir uyarı penceresi gösterebilir ve(ya) OpenSettings fonksiyonu ile ayarlar menüsünü otomatik olarak açabilirsiniz.

  • Permission[] AndroidRuntimePermissions.CheckPermissions( params string[] permissions )

Birden çok izni aynı anda kontrol eder. Döndürülen array‘de her bir izin için bir tane Permission değeri tutulur.

  • Permission AndroidRuntimePermissions.RequestPermission( string permission )

Girilen izni kullanıcıdan talep eder ve sonucu döndürür.

  • Permission[] AndroidRuntimePermissions.RequestPermissions( params string[] permissions )

Birden çok izni aynı anda kullanıcıdan talep eder. Döndürülen array‘de her bir izin için bir tane Permission değeri tutulur.

  • void AndroidRuntimePermissions.OpenSettings()

Uygulamanın ayarlar menüsünü otomatik olarak açar. Gerekli olduğu durumda buradan kullanıcı bir izni elle verebilir.

Örnek Kod

Aşağıdaki kod, ekranın sağ alt köşesine dokunduğunuzda kullanıcıdan WRITE_EXTERNAL_PERMISSION iznini talep eder (bu izni önce AndroidManifest’te tanımlamayı unutmayın):

void Update()
{
	if( Input.GetMouseButtonDown( 0 ) && Input.mousePosition.x > Screen.width * 0.8f && Input.mousePosition.y < Screen.height * 0.2f )
	{
		AndroidRuntimePermissions.Permission izin = AndroidRuntimePermissions.RequestPermission( "android.permission.WRITE_EXTERNAL_STORAGE" );
		if( izin == AndroidRuntimePermissions.Permission.Granted )
			Debug.Log( "WRITE_EXTERNAL_STORAGE iznimiz var!" );
		else
			Debug.Log( "İzin durumu: " + izin );

		// WRITE_EXTERNAL_STORAGE ve CAMERA izinlerini aynı anda talep etmek
		//AndroidRuntimePermissions.Permission[] izinler = AndroidRuntimePermissions.RequestPermissions( "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.CAMERA" );
		//if( izinler[0] == AndroidRuntimePermissions.Permission.Granted && izinler[1] == AndroidRuntimePermissions.Permission.Granted )
		//	Debug.Log( "Tüm izinlere sahibiz!" );
		//else
		//	Debug.Log( "Bazı izinlere sahip değiliz..." );
	}
}

Sonraki dersimizde görüşmek üzere, hoşça kalın!

yorum
  1. törkikin' dedi ki:

    Hocam şuana kadar gördüğüm en iyi site bu Unity hakkında. Teşekkürler,başarınızın devamını diliyorum:)

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.