Çalışma zamanında istenen izinler

Her Android uygulaması sınırlı erişime sahip bir korumalı alanda çalışır. Uygulamanızın dışındaki bilgileri kullanmak için bir çalışma zamanı izni belirleyip bir izin isteği oluşturabilirsiniz sağlayan e-posta adresi. Bu adımlar, Google Ads API'sini kullanmaya izinleriyle ilgili daha fazla bilgi edinin.

Tehlikeli olduğunu bildirirseniz izinleri ve Uygulamanızın Android 6.0 (API düzeyi 23) çalıştıran bir cihazda yüklü olması veya aşağıdaki adımları uygulayarak çalışma zamanında tehlikeli izinleri istemeniz gerekir: adımlarına göz atın.

Tehlikeli bir izin beyan etmiyorsanız veya uygulamanız Android 5.1 (API düzeyi 22) veya daha düşük bir sürümü çalıştıran bir cihaz kullanıyorsanız izinler gerek yoktur ve kalan adımların hiçbirini tamamlamanız gerekmez. bu sayfada yer alır.

Temel ilkeler

Çalışma zamanında izin istemeye ilişkin temel ilkeler şunlardır:

  • Kullanıcı ilk olarak gerektiren bir özelliktir.
  • Kullanıcıyı engellemeyin. Eğitim amaçlı kullanıcı arayüzünü iptal etme seçeneği her zaman sağlanmalıdır Örneğin, izin isteme gerekçesini açıklayan bir akış.
  • Kullanıcı bir özelliğin gerektirdiği bir izni reddeder veya iptal ederse, kullanıcının uygulamanızı kullanmaya devam edebilmesi için, muhtemelen izin gerektiren özelliğin devre dışı bırakılması.
  • Herhangi bir sistem davranışı varsaymayın. Örneğin, izinlerin yalnızca aynı izin grubunda bulunmalıdır. İzin grubu sadece sistem, kullanıcıya giriş yaparken gösterilecek sistem iletişim kutularının sayısını Bir uygulama yakından alakalı izinler istiyorsa.

İzin isteme iş akışı

Uygulamanızda çalışma zamanında istenen izinleri beyan etmeden ve istemeden önce ve bunu uygulamanız gerekip gerekmediğini kontrol edin. Şunları yapabilirsiniz: uygulamanızda fotoğraf çekme, medya içeriğini duraklatma gibi birçok kullanım alanı ve alakalı reklamlar göstererek, izin verir.

Uygulamanızın çalışma zamanında istenen izinleri bildirmesi ve istemesi gerektiği sonucuna varırsanız şu adımları tamamlayın:

  1. Uygulamanızın manifest dosyasında şunu beyan edin: uygulamanızın ihtiyaç duyabileceği izinlerin isteğinde bulunabilirsiniz.
  2. Uygulamanızın kullanıcı deneyimini, uygulamanızdaki belirli işlemler ile ilişkilendirilecek şekilde tasarlayın belirli çalışma zamanında istenen izinler. Kullanıcılara hangi işlemlerin yapılması gerektiğini bildirin ve uygulamanızın gizli kullanıcı verilerine erişmesine izin verin.
  3. Kullanıcının uygulamanızda görevi veya işlemi çağırmasını bekleyin erişim gerektiren bir uygulamadır. O sırada uygulamanız bu verilere erişmek için gerekli çalışma zamanı iznini isteme.
  4. Kullanıcının çalışma zamanı için daha önce izin verip vermediğini kontrol edin izninin gerektirdiği belirli bir veri bulunur. Yanıtınız evet ise uygulamanız, gizli kullanıcı verilerini içerebilir. Çalışmıyorsa bir sonraki adıma geçin.

    Her işlem yaptığınızda izniniz olup olmadığını bu izni gerektirir.

  5. Uygulamanızın kullanıcıya gerekçe göstermesinin gerekip gerekmediğini kontrol edin. uygulamanızın kullanıcıya neden belirli bir çalışma zamanında izin vermesi gerektiğini açıklayan içerikler. Sistem, uygulamanızın gerekçe göstermemesi gerektiğine karar verirse devam edin: bir sonraki adıma geçmelisiniz.

    Ancak sistem, uygulamanızın bir gerekçe göstermesi gerektiğini belirlerse gerekçeyi bir kullanıcı arayüzü öğesinde sunmalıdır. Bu gerekçede Uygulamanızın hangi verilere erişmeye çalıştığını ve hangi avantajları sağladığını net bir şekilde açıklayın uygulama, çalışma zamanında istenen izni kullanıcıya sağlayabilir. Şu tarihten sonra: kullanıcı gerekçeyi kabul edip sonraki adıma geçin.

  6. Uygulamanızın ihtiyaç duyduğu çalışma zamanı iznini isteyin gizli kullanıcı verilerine erişmek istiyor. Sistemde, sisteme ait izinlere genel bakış sayfasında gösterilene benzer bir izin istemi öğrenin.

  7. Kullanıcının yanıtını (ör. onay vermeyi veya reddetmeyi seçip seçmediklerini) kontrol etme çalışma zamanında istenen izne tabi değildir.

  8. Kullanıcı, uygulamanıza izin verdiyse kullanıcının uygulamanıza erişmesine izin verin kullanıcı verileri. Kullanıcı bunun yerine izni reddettiyse yazılımdaki uygulama deneyimi sunarak kullanıcıya işlevsellik sağlar söz konusu izin tarafından korunan bilgiler dahil edilmemelidir.

Şekil 1'de bununla ilişkili iş akışı ve kararlar kümesi gösterilmektedir işlem:

Şekil 1. Projeyi tanımlamaya ve geliştirmeye ilişkin iş akışını gösteren şema Android'de çalışma zamanında istenen izinler.

Uygulamanıza daha önce izin verilip verilmediğini belirleme

Kullanıcının uygulamanıza daha önce belirli bir izin verip vermediğini kontrol etmek için söz konusu izni ContextCompat.checkSelfPermission() yöntemidir. Bu yöntem, PERMISSION_GRANTED veya PERMISSION_DENIED (uygulamanızın izne sahip olup olmadığına bağlı olarak)

Uygulamanızın neden bu izne ihtiyacı olduğunu açıklayın

Çağrı yaptığınızda sistem tarafından gösterilen izinler iletişim kutusu requestPermissions(), uygulamanızın hangi izni istediğini söylüyor ancak söylemiyor neden? Bazı durumlarda, kullanıcılar bunu kafa karıştırıcı bulabilir. Planlarınızı her zaman Siz aramadan önce uygulamanızın neden izinleri istediğini kullanıcıya açıklayın requestPermissions()

Araştırmalar, kullanıcıların izin istekleri konusunda uygulamanın neden ihtiyaç duyduğunu bilirler. Örneğin Uygulamanın temel bir özelliğini desteklemek veya reklamlar için Sonuç olarak izin grubuna denk gelen API çağrılarının yalnızca bir kısmını kullanan bu izinlerden hangilerini neden kullandığınızı açık bir şekilde listelemenize yardımcı olur. Örneğin, Örneğin, yalnızca yaklaşık konum kullanıyorsanız, kullanıcının veya uygulamanızla ilgili yardım makalelerine bakın.

Belirli koşullarda, kullanıcılara hangi anahtar kelimelerin gerçek zamanlı olarak hassas verilere erişimidir. Örneğin, veya mikrofonunuz varsa, bir kontrol cihazı kullanarak bunu veya bildirim tepsisinde bir yerde bulunan bildirim simgesini ( arka planda çalışıyorsa) sizin gibi gizlice veri toplamaktır.

Sonuç olarak, uygulamanızda bir şey yapmak için izin istemeniz gerektiğinde ancak kullanıcı bunun nedenini net bir şekilde bilmiyorsa kullanıcının, neden en hassas izinlere ihtiyaç duyduğunuzu öğrenebilirsiniz.

ContextCompat.checkSelfPermission() yöntemi PERMISSION_DENIED sonucunu döndürürse shouldShowRequestPermissionRationale() numaralı telefonu arayın. Bu yöntem true değerini döndürürse kullanıcıya bir eğitim kullanıcı arayüzü gösterin. Bu kullanıcı arayüzünde, Kullanıcının etkinleştirmek istediği özelliğin neden belirli bir özelliğe ihtiyaç duyduğunu açıklayın izni gerekir.

Ayrıca, uygulamanız konum, mikrofon, veya kameranızı kullanarak, uygulamanızın neden erişebilir.

İzin iste

Kullanıcı eğitim amaçlı bir kullanıcı arayüzünü görüntüledikten sonra veya shouldShowRequestPermissionRationale(), bir bildirimi eğitim amaçlı kullanıcı arayüzünü kullanıyorsanız izin isteyin. Kullanıcılar bir sistem görür Bu izin iletişim kutusunu kullanarak, belirli bir kullanıcıya izin verip vermemeyi uygulamanıza izin verin.

Bunu yapmak için RequestPermission aracını kullanın. AndroidX kitaplığında bulunur ve sistemin mevcut içerikleri sizin için izin istek koduna ekleyebilirsiniz. Çünkü RequestPermission sözleşmesini kullanmak mantığınızı daha basit hale getirir. bir çözüm üretmeye çalışın. Ancak, gerekirse bir istek kodunu yönetebilirsiniz kendiniz de ekleyebilirsiniz. bu istek kodunu izin geri çağırma mantığınıza ekleyin.

Sistemin, izin istek kodunu yönetmesine izin ver

Sistemin bir şununla ilişkilendirilmiş istek kodunu yönetmesine izin vermek için: aşağıdaki kitaplıklara bağımlılık ekleyin: modülünün build.gradle dosyası:

Ardından aşağıdaki sınıflardan birini kullanabilirsiniz:

Aşağıdaki adımlarda RequestPermission sözleşmesinin nasıl kullanılacağı gösterilmektedir. İlgili içeriği oluşturmak için kullanılan süreci RequestMultiplePermissions sözleşmesi için neredeyse aynıdır.

  1. Etkinliğinizin veya parçanızın başlatma mantığında bir uygulama iletin. / ActivityResultCallback bir çağrıya registerForActivityResult(). ActivityResultCallback, uygulamanızın kullanıcıların tıklayın.

    Döndürülen registerForActivityResult() değerini referans alın. Bu değer şu türde ActivityResultLauncher

  2. Gerektiğinde sistem izinleri iletişim kutusunu görüntülemek için launch() yönteminde kullandığınız ActivityResultLauncher örneğindeki önceki adım.

    launch() çağrıldıktan sonra sistem izinleri iletişim kutusu görüntülenir. Kullanıcı bir seçim yaparsa sistem, eşzamansız olarak uygulamanızı çağırır. (önceki adımda tanımladığınız), ActivityResultCallback.

    Not: Uygulamanız gösterilen iletişim kutusunu özelleştiremez launch() numaralı telefonu aradığınızda. Daha fazla bilgi vermek veya kullanıcıya daha kolay bir şekilde sunulabilmesi için uygulamanızın kullanıcı arayüzünü uygulamanızdaki bir özellik için neden özel bir izin gerektiğini anlamanıza yardımcı olur. Örneğin, Örneğin, düğmeyi etkinleştiren düğmedeki metni özelliğini kullanabilirsiniz.

    Ayrıca, sistem izni iletişim kutusunda izin grubu'nu içermelidir. Bu izin gruplandırması, sistemin kullanım kolaylığını ve uygulamanızın içinde veya dışında olması gereken belirli bir izinle izin grubu.

Aşağıdaki kod snippet'i, izin yanıtının nasıl işleneceğini gösterir:

Kotlin

// Register the permissions callback, which handles the user's response to the
// system permissions dialog. Save the return value, an instance of
// ActivityResultLauncher. You can use either a val, as shown in this snippet,
// or a lateinit var in your onAttach() or onCreate() method.
val requestPermissionLauncher =
    registerForActivityResult(RequestPermission()
    ) { isGranted: Boolean ->
        if (isGranted) {
            // Permission is granted. Continue the action or workflow in your
            // app.
        } else {
            // Explain to the user that the feature is unavailable because the
            // feature requires a permission that the user has denied. At the
            // same time, respect the user's decision. Don't link to system
            // settings in an effort to convince the user to change their
            // decision.
        }
    }

Java

// Register the permissions callback, which handles the user's response to the
// system permissions dialog. Save the return value, an instance of
// ActivityResultLauncher, as an instance variable.
private ActivityResultLauncher<String> requestPermissionLauncher =
    registerForActivityResult(new RequestPermission(), isGranted -> {
        if (isGranted) {
            // Permission is granted. Continue the action or workflow in your
            // app.
        } else {
            // Explain to the user that the feature is unavailable because the
            // feature requires a permission that the user has denied. At the
            // same time, respect the user's decision. Don't link to system
            // settings in an effort to convince the user to change their
            // decision.
        }
    });

Bu kod snippet'i, web sitenizin URL'sini kontrol etmek için bir izin ve gerektiğinde kullanıcıdan izin istemek:

Kotlin

when {
    ContextCompat.checkSelfPermission(
            CONTEXT,
            Manifest.permission.REQUESTED_PERMISSION
            ) == PackageManager.PERMISSION_GRANTED -> {
        // You can use the API that requires the permission.
    }
    ActivityCompat.shouldShowRequestPermissionRationale(
            this, Manifest.permission.REQUESTED_PERMISSION) -> {
        // In an educational UI, explain to the user why your app requires this
        // permission for a specific feature to behave as expected, and what
        // features are disabled if it's declined. In this UI, include a
        // "cancel" or "no thanks" button that lets the user continue
        // using your app without granting the permission.
        showInContextUI(...)
    }
    else -> {
        // You can directly ask for the permission.
        // The registered ActivityResultCallback gets the result of this request.
        requestPermissionLauncher.launch(
                Manifest.permission.REQUESTED_PERMISSION)
    }
}

Java

if (ContextCompat.checkSelfPermission(
        CONTEXT, Manifest.permission.REQUESTED_PERMISSION) ==
        PackageManager.PERMISSION_GRANTED) {
    // You can use the API that requires the permission.
    performAction(...);
} else if (ActivityCompat.shouldShowRequestPermissionRationale(
        this, Manifest.permission.REQUESTED_PERMISSION)) {
    // In an educational UI, explain to the user why your app requires this
    // permission for a specific feature to behave as expected, and what
    // features are disabled if it's declined. In this UI, include a
    // "cancel" or "no thanks" button that lets the user continue
    // using your app without granting the permission.
    showInContextUI(...);
} else {
    // You can directly ask for the permission.
    // The registered ActivityResultCallback gets the result of this request.
    requestPermissionLauncher.launch(
            Manifest.permission.REQUESTED_PERMISSION);
}

İzin isteği kodunu kendiniz yönetme

Sistemin, izin isteğini yönetmesine izin vermek yerine kodu kullanıyorsanız izin isteğini yönetebilirsiniz. kendiniz kodlayabilirsiniz. Bunu yapmak için, requestPermissions().

Aşağıdaki kod snippet'i, istek kodu:

Kotlin

when {
    ContextCompat.checkSelfPermission(
            CONTEXT,
            Manifest.permission.REQUESTED_PERMISSION
            ) == PackageManager.PERMISSION_GRANTED -> {
        // You can use the API that requires the permission.
        performAction(...)
    }
    ActivityCompat.shouldShowRequestPermissionRationale(
            this, Manifest.permission.REQUESTED_PERMISSION) -> {
        // In an educational UI, explain to the user why your app requires this
        // permission for a specific feature to behave as expected, and what
        // features are disabled if it's declined. In this UI, include a
        // "cancel" or "no thanks" button that lets the user continue
        // using your app without granting the permission.
        showInContextUI(...)
    }
    else -> {
        // You can directly ask for the permission.
        requestPermissions(CONTEXT,
                arrayOf(Manifest.permission.REQUESTED_PERMISSION),
                REQUEST_CODE)
    }
}

Java

if (ContextCompat.checkSelfPermission(
        CONTEXT, Manifest.permission.REQUESTED_PERMISSION) ==
        PackageManager.PERMISSION_GRANTED) {
    // You can use the API that requires the permission.
    performAction(...);
} else if (ActivityCompat.shouldShowRequestPermissionRationale(
        this, Manifest.permission.REQUESTED_PERMISSION)) {
    // In an educational UI, explain to the user why your app requires this
    // permission for a specific feature to behave as expected, and what
    // features are disabled if it's declined. In this UI, include a
    // "cancel" or "no thanks" button that lets the user continue
    // using your app without granting the permission.
    showInContextUI(...);
} else {
    // You can directly ask for the permission.
    requestPermissions(CONTEXT,
            new String[] { Manifest.permission.REQUESTED_PERMISSION },
            REQUEST_CODE);
}

Kullanıcı, sistem izinleri iletişim kutusuna yanıt verdikten sonra sistem, uygulamanızda onRequestPermissionsResult() kullanımını çağırır. Sistem, izin iletişim kutusunun yanıtının yanı sıra tanımladığınız istek kodu. aşağıdaki kod snippet'inde gösterildiği gibidir:

Kotlin

override fun onRequestPermissionsResult(requestCode: Int,
        permissions: Array<String>, grantResults: IntArray) {
    when (requestCode) {
        PERMISSION_REQUEST_CODE -> {
            // If request is cancelled, the result arrays are empty.
            if ((grantResults.isNotEmpty() &&
                    grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                // Permission is granted. Continue the action or workflow
                // in your app.
            } else {
                // Explain to the user that the feature is unavailable because
                // the feature requires a permission that the user has denied.
                // At the same time, respect the user's decision. Don't link to
                // system settings in an effort to convince the user to change
                // their decision.
            }
            return
        }

        // Add other 'when' lines to check for other
        // permissions this app might request.
        else -> {
            // Ignore all other requests.
        }
    }
}

Java

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
        int[] grantResults) {
    switch (requestCode) {
        case PERMISSION_REQUEST_CODE:
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0 &&
                    grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Permission is granted. Continue the action or workflow
                // in your app.
            }  else {
                // Explain to the user that the feature is unavailable because
                // the feature requires a permission that the user has denied.
                // At the same time, respect the user's decision. Don't link to
                // system settings in an effort to convince the user to change
                // their decision.
            }
            return;
        }
        // Other 'case' lines to check for other
        // permissions this app might request.
    }
}

Konum izni isteme

Konum izni isteğinde bulunurken çalışma zamanı izinlerine bakın. Konum izinleri konusundaki önemli farklardan biri de sistemimizde konumla ilgili birden fazla izin bulunuyor. İzin verdiğiniz izinler ve talep etme şekliniz, web sitenizin konum gereksinimlerine bağlıdır. kullanım alanına sahip olursunuz.

Ön plan konumu

Uygulamanız yalnızca konum bilgilerini paylaşan veya alan bir özellik içeriyorsa bir defa veya belirli bir süre boyunca devam ediyorsa, bu özellik için konum erişimi. Buna örnek olarak aşağıdakiler verilebilir:

  • Navigasyon uygulamasındaki bir özellik, kullanıcıların adım adım yol göstermesini sağlar yol tarifleri alın.
  • Mesajlaşma uygulamasındaki bir özellik, kullanıcıların mevcut konumlarını paylaşmalarına olanak tanır gerçekleştirebilirsiniz.

Sistem, uygulamanızın ön planda konumunu kullandığını varsayar: Uygulamanız cihazın mevcut konumuna aşağıdakilerden biri üzerinden erişiyorsa durumlar:

  • Uygulamanıza ait etkinlikler görünür durumda.
  • Uygulamanız bir ön plan hizmeti çalıştırıyor. Bir ön plan hizmeti sistem, sürekli bir bildirim göstererek kullanıcı farkındalığını artırır. Uygulamanız arka plana yerleştirildiğinde (örneğin, Kullanıcı cihazındaki ana sayfa düğmesine bastığında veya cihazının ekranını açtığında kapalı.

    Android 10 (API düzeyi 29) ve sonraki sürümlerde ön plan hizmet türü aşağıdaki kod snippet'inde gösterildiği gibi location öğesinin durumunu tanımlar. Önceki sürümlerde kullanıyorsanız bu ön plan hizmet türünü belirtmeniz önerilir.

    <!-- Recommended for Android 9 (API level 28) and lower. -->
    <!-- Required for Android 10 (API level 29) and higher. -->
    <service
        android:name="MyNavigationService"
        android:foregroundServiceType="location" ... >
        <!-- Any inner elements go here. -->
    </service>
    

Uygulamanız ACCESS_COARSE_LOCATION veya ACCESS_FINE_LOCATION izninin değerini değiştirin:

<manifest ... >
  <!-- Include this permission any time your app needs location information. -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  <!-- Include only if your app benefits from precise location access. -->
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

Arka planda konum

Uygulama içindeki bir özellik varsa arka planda konuma erişmesi gereken uygulamalar konumunu diğer kullanıcılarla sürekli olarak paylaşır veya Coğrafi sınır belirleme API. Aşağıda çeşitli örnekler verilmiştir:

  • Aile konum paylaşımı uygulamasındaki bir özellik, kullanıcıların sürekli olarak Aile üyeleriyle konum paylaşmak.
  • IoT uygulamasındaki bir özellik, kullanıcıların ev cihazlarını bu ayarları, kullanıcı evden çıkarken kapanıyor ve kullanıcı ana ekrana döner.

Uygulamanız cihazın bulunduğu konumu, ön plan konumu bölümüne bakın. Arka planda konum doğruluğu: konuma göre değişen ön plan konum doğruluğu ile aynıdır. Uygulamanızın beyan ettiği konum izinleri.

Android 10 (API düzeyi 29) ve sonraki sürümlerde ACCESS_BACKGROUND_LOCATION uygulamanızın manifest dosyasında arka planda konum isteğinde bulunma izni erişim elde edebilirsiniz. Şu sürümün önceki sürümlerinde: Android, uygulamanız ön planda konuma otomatik olarak eriştiğinde arka planda konuma erişimi de alır.

<manifest ... >
  <!-- Required only when requesting background location access on
       Android 10 (API level 29) and higher. -->
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

Reddedilen izinleri işleme

Kullanıcı bir izin isteğini reddederse uygulamanız, kullanıcıların bunu anlamasına yardımcı olmalıdır. ve böylece izni reddetmenin sonuçlarını görebilirsiniz. Özellikle, uygulamanız çalışmayan özelliklerin farkında olmasını sağlayabilirsiniz. Bunu yaparken aşağıdaki en iyi uygulamaları aklınızda bulundurun:

  • Kullanıcının dikkatini yönlendirin. Uygulamanızın kullanıcı arayüzünün belirli bir bölümünü vurgulayın Bu tür durumlarda uygulamanız gereken izni gerekir. Yapabileceklerinizle ilgili örnekleri aşağıda bulabilirsiniz:

    • Özellik sonuçlarının veya verilerinin görüntülenebileceği bir mesajı gösterir.
    • Hata simgesi ve rengi içeren farklı bir düğmeyi görüntüleyin.
  • Net olun. Genel bir mesaj göstermeyin. Bunun yerine Uygulamanız gerekli izne sahip olmadığı için özellikler kullanılamıyor.

  • Kullanıcı arayüzünü engellemeyin. Başka bir deyişle, Kullanıcıların uygulamanızı kullanmaya devam etmesini engelleyen tam ekran uyarı mesajı mümkün değil.

ziyaret edin.

Aynı zamanda, uygulamanız, kullanıcının bir izni gerekir. Android 11'den (API düzeyi 30) itibaren, kullanıcı şunun için Reddet'e dokunursa: Uygulamanızın kullanım ömrü boyunca belirli bir izni birden fazla kez uygulamanız durumunda kullanıcı, sistem izinleri iletişim kutusunu görmez bu izni tekrar istiyor. Kullanıcının yaptığı işlem "bir daha sorma" anlamına gelir. Şu tarihte: kullanıyorsanız, kullanıcılar şunu her yaptığında sistem izinleri iletişim kutusunu uygulama, daha önce "sorma" seçeneğini belirlememişse izin istedi tekrar" onay kutusunu veya seçeneği işaretleyin.

Bir kullanıcı bir izin isteğini birden fazla kez reddederse bu işlem kalıcı olarak kabul edilir. inkâr eder. Kullanıcılardan, yalnızca ihtiyaç duyduklarında izinlerinin erişimi kaybetmiş olabilirsiniz. Aksi takdirde söz konusu özelliğin (izinleri yeniden isteyin).

Belirli durumlarda izin, Kullanıcının herhangi bir işlem yapması. (Bir izin verilebilir gerçekleştirebilirsiniz.) Otomatikleştirmeye ilişkin herhangi bir şeyi varsaymamak, gösterir. Uygulamanızın uygulamanıza hâlâ bu iznin verilip verilmediğini kontrol edin.

Uygulama isteğinde bulunurken en iyi kullanıcı deneyimini sunmak için Uygulama izinleriyle ilgili en iyi uygulamalar başlıklı makaleyi de inceleyin.

Test ve hata ayıklama sırasında ret durumunu inceleme

Bir uygulamaya izinlerin kalıcı olarak reddedilip reddedilmediğini belirlemek (hata ayıklama için hariç) aşağıdaki komutu kullanın:

adb shell dumpsys package PACKAGE_NAME

Burada PACKAGE_NAME, incelenecek paketin adıdır.

Komutun çıkışı aşağıdaki gibi bölümler içerir:

...
runtime permissions:
  android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
  android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
...

Kullanıcı tarafından bir kez reddedilen izinler USER_SET tarafından işaretlenir. İki kez Reddet seçilerek kalıcı olarak reddedilen izinler USER_FIXED tarafından işaretlendi.

Test kullanıcılarının, test sırasında istek iletişim kutusunu gördüklerinden emin olmak için bu işaretleri sıfırlayın uygulamanız için hata ayıklama işlemini tamamlayın. Bunun için şu komutu kullanın:

adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed

PERMISSION_NAME, istediğiniz iznin adıdır sıfırlandı.

Android uygulama izinlerinin tam listesini görüntülemek için permissions API'yi ziyaret edin. referans sayfasına gidin.

Tek seferlik izinler

&#39;Yalnızca bu sefer&#39; adlı seçenek üç düğmeden ikincisidir
    iletişim kutusu.
Şekil 2. Bir uygulama istekte bulunduğunda görünen sistem iletişim kutusu tek seferlik izin almanız gerekiyor.

Android 11'den (API düzeyi 30) itibaren, uygulamanız her izin istediğinde kullanıcı izinleri iletişim kutusu, konum, mikrofon veya kamera ile ilgili Şekil 2'de gösterildiği gibi Yalnızca bu sefer adlı bir seçenek içerir. Kullanıcı bu seçeneği İletişim kutusunda, uygulamanıza tek seferlik geçici bir izin verilir.

Uygulamanız şuna göre bir süre boyunca ilgili verilere erişebilir: Uygulamanızın davranışı ve kullanıcının işlemleri:

  • Uygulamanızın etkinliği görünür durumdayken uygulamanız verilere erişebilir.
  • Kullanıcı uygulamanızı arka plana gönderirse uygulamanız erişmeye devam edebilir. kısa bir süreye ait verilerin toplandığı anlamına gelir.
  • Etkinlik görünür durumdayken bir ön plan hizmeti başlatırsanız ve kullanıcı sonra uygulamanızı arka plana taşırsanız uygulamanız verilere erişmeye devam edebilir. ön plan hizmeti durdurulana kadar bekleyin.

İzin iptal edildiğinde uygulama işlemi sona erer

Kullanıcı tek seferlik izni iptal ederse (ör. sistem ayarları) Uygulama, ön plan başlatmış olsanız da olmasanız da verilere erişemiyor geliştirmenizi sağlar. Her izinde olduğu gibi, kullanıcı, uygulamanızın tek seferlik bir iznini iptal ederse uygulamanızın işlemi sona erer.

Kullanıcı uygulamanızı bir sonraki açışında ve uygulamanızdaki bir özellik şunlara erişim istediğinde: konum, mikrofon veya kamera ya da mikrofon veya kamera gibi olması durumunda, kullanıcıdan tekrar izin istenir.

Kullanılmayan izinleri sıfırlayın

Android, kullanılmayan çalışma zamanı izinlerini varsayılan, reddedildi durumu:

Uygulama erişimini kaldır

Android 13 (API düzeyi 33) ve sonraki sürümlerde uygulamanızın uygulamanızın artık gerektirmediği çalışma zamanında istenen izinleri iptal eder. Uygulamanızı güncellediğinizde Böylece, kullanıcıların uygulamanızın neden bu şekilde belirli izinler istemeye devam ediyor. Bu bilgi, kullanıcıların güvenini kazanmanızı sağlar dokunun.

Çalışma zamanında istenen izne erişimi kaldırmak için o iznin adını iletin hedef revokeSelfPermissionOnKill(). Çalışma zamanında istenen izin grubuna erişimi aynı anda kaldırmak için içine alarak revokeSelfPermissionsOnKill(). İzin kaldırma işlemi eşzamansız olarak gerçekleşir ve tüm işlemleri sonlandırır uygulamanızın UID'siyle ilişkilendirilir.

Sistemin, uygulamanızın izinlere erişimini kaldırması için Uygulamanıza bağlı işlemlerin kaldırılması gerekir. API'yi çağırdığınızda sistem, bu süreçleri ne zaman sonlandırmanın güvenli olduğunu belirler. Genellikle sistem, Uygulamanız arka planda uzun süre çalışana kadar görüntülenir.

Uygulamanızın artık belirli bir çalışma zamanına erişmesi gerekmediğini kullanıcıya bildirmek için izinleri varsa, kullanıcının uygulamanızı bir sonraki açışında iletişim kutusu gösterilsin. Bu iletişim kutusu izinlerin listesini içerebilir.

Kullanılmayan uygulamaların izinlerini otomatik olarak sıfırla

Uygulamanız Android 11 (API düzeyi 30) veya sonraki bir sürümü hedefliyorsa ve birkaç süre kullanılmıyorsa aylar sonra, sistem, verileri otomatik olarak sıfırlayarak kullanıcı verilerini korur. Kullanıcının uygulamanıza verdiği çalışma zamanında istenen izinleri içerir. Rehberde daha fazla bilgi edinin uygulama hazırda bekletme hakkında.

Gerekirse varsayılan işleyici olma isteği

Bazı uygulamalar, arama kayıtlarıyla ilgili hassas kullanıcı bilgilerine erişime bağlıdır ve SMS mesajları. Arama kayıtlarına özgü izinleri talep etmek istiyorsanız uygulamanızı Play Store'da yayınlamanıza rağmen, görüntülenen önce uygulamanızı temel sistem işlevi için varsayılan işleyici olarak ayarlamasına isteyebileceklerini anlamanız gerekir.

Varsayılan işleyiciler hakkında daha fazla bilgi için kullanıcılara yönelik varsayılan işleyici istemini görmek için yalnızca varsayılan işleyiciler arasından seçim yapabilirsiniz.

Test amacıyla tüm çalışma zamanı izinlerini ver

Bir bilgisayarda uygulama yüklediğinizde tüm çalışma zamanı izinlerini otomatik olarak emülatörü veya test cihazı kullanıyorsanız adb shell install için -g seçeneğini kullanın. komutunu çalıştırın:

adb shell install -g PATH_TO_APK_FILE

Ek kaynaklar

İzinler hakkında daha fazla bilgi için şu makaleleri okuyun:

İzin isteme hakkında daha fazla bilgi edinmek için izin örnekleri

Gizliliği en iyi şekilde gösteren bu codelab'i de tamamlayabilirsiniz. inceleyin.