Unity Android READ_PHONE_STATE İzni Hakkında

Yayınlandı: 28 Şubat 2018 yasirkula tarafından Oyun Tasarımı, UNITY 3D içinde

Tekrardan merhabalar,

Bu ufak yazımda, Unity 3D ile Android’e oyun geliştirirken yaşayabileceğiniz rahatsız edici bir sorunu nasıl çözeceğinizi paylaşacağım.

Bazen Unity oyunlarınızı Android’e build alırken siz farkında olmadan uygulamaya READ_PHONE_STATE isminde bir izin eklenebiliyor ve bu durumda oyun başlarken kullanıcıya “XYZ uygulamasına telefon aramaları yapma ve çağrıları yönetme izni verilsin mi?” şeklinde bir diyalog gösteriliyor. Tahmin edeceğiniz üzere, daha uygulama açılır açılmaz kullanıcının böyle bir şey görmesi, onun uygulamaya olan güvenini sarsabilir.

Bu sorunun teşhisi ve çözümü için yazının devamını okuyabilirsiniz…

Yardımcı kaynak: https://forum.unity.com/threads/unity-2017-read_phone_state-permission-cant-remove.486732/

Öncelikle siz de bu sorundan muzdarip misiniz onu teşhis edelim. Bunu anlamanın en kolay yolu, Unity’den Android için build aldıktan sonra projenizin olduğu klasördeki Temp\StagingArea\AndroidManifest.xml dosyasını açıp içerisinde şu satır var mı diye bakmak:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Eğer yoksa bu sıkıntı sizde yok demektir. Bu durumda bu yazının devamını okumanıza gerek yok. Aksi taktirde teşhisimizin ikinci safhasına geçelim!

Bu safhada, bu iznin projenizdeki bir pluginden mi geldiğini bulacağız. Bunun için projenizin Assets\Plugins\Android klasöründeki tüm AndroidManifest.xml dosyalarını tek tek açıp içlerinde yukarıdaki satır var mı diye bakmalısınız. Ayrıca projenizdeki tüm .aar uzantılı dosyaları bulup Winrar veya benzeri bir program ile açıp onların içindeki AndroidManifest.xml’lere de bakmalısınız. Eğer projenizde hiç AndroidManifest yoksa veya o dosyalarda yukarıdaki satır bulunmuyorsa, o zaman sizin projenizde de READ_PHONE_STATE sıkıntısı var demektir. Ama yok eğer bu satır projenizdeki bir AndroidManifest.xml dosyasından geliyorsa, o zaman bu izni o AndroidManifest dosyasını oraya koyan plugin istiyor demektir ve bu durumda, plugin’in yapımcısıyla temasa geçip niye bu izni istediğini sormaktan başka elinizden bir şey gelmez. Aksi halde READ_PHONE_STATE sorununu çözmek için yazımıza devam edelim.

Projemizi teşhis edip READ_PHONE_STATE zımbırtısının çözülmesi gereken bir hastalık olduğuna kanaat getirdiğimize göre, bu hastalıkla nasıl başa çıkabiliriz ona bakalım. Burada 3 aşamalı bir çözüm yöntemi kullanacağız. Yapmanız gereken, bu adımları sırayla takip edip her bir adımdan sonra tekrar Android build alıp sorunun devam edip etmediğini kontrol etmek (yine Temp\StagingArea\AndroidManifest.xml‘in içeriğini kontrol edebilirsiniz). Eğer sorun çözülmüşse sonraki adımları yapmanıza gerek yok demektir.

1- Assets/Plugins/Android klasöründeki AndroidManifest.xml dosyasını açıp en sondaki </manifest> satırından hemen önce şunu ekleyin:

<uses-sdk android:minSdkVersion="5" />

Buradaki 5 değerini, Edit-Project Settings-Player-Other Settings‘teki “Minimum API Level“da yazan sayı ile değiştirin. Eğer AndroidManifest’inizde halihazırda android:minSdkVersion geçiyorsa ve değeri “Minimum API Level”dan küçükse, onun değerini “Minimum API Level”a eşitleseniz de olur. Eğer projenizde hiç AndroidManifest.xml yoksa da, Unity’nizin kurulu olduğu klasördeki Editor\Data\PlaybackEngines\AndroidPlayer\Apk konumunda (veya o civarlarda) yer alan AndroidManifest.xml’i kopyalayıp projenizin Assets\Plugins\Android klasörüne yapıştırın ve onun üzerinde bu güncellemeyi yapın.

2- Android SDK’yı kurduğunuz klasördeki tools klasörünü silin ve onu şu adresteki 25.2.3 sürümü ile değiştirin: https://dl.google.com/android/repository/tools_r25.2.3-windows.zip (Mac ve Linux için olan indirme linkleri için buraya tıklayın)

3- Assets\Plugins\Android klasöründeki AndroidManifest.xml dosyasının sonundaki </manifest> satırından hemen önce şu satırı ekleyin:

<uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />

Dosyanın başındaki <manifest blabla > kısmının içine de şunu ekleyin (eğer zaten yoksa):

xmlns:tools="http://schemas.android.com/tools"

Ardından Build Settings’teki Build System‘ı “Gradle (New)” olarak değiştirip öyle build alın.

İşte bu kadar! Umarım yardımcı olmuştur. Bu sıkıntı bende daha önceden iki defa baş göstermişti ve ilk seferinde 1. adımla, ikinci seferinde de 2. adımla sorun çözülmüştü. Şahsen 3. adımı deneme fırsatım olmadı yani.

O halde sonraki derslerde görüşmek üzere!

yorum
  1. duman61 dedi ki:

    1 numara build alırken hata verdi ama 3 benim sorunu çözdü çok teşekkürler.

  2. Hasan UĞUR dedi ki:

    Sorunun kaynağını bulamadım fakat verdiğin 3. madde ile çözdüm.
    Teşekkürler 🙂

Cevap Yazın

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.