• 18-01-2023, 16:01:01
    #1
    Merhabalar,

    Android uygulamalarda bildirim gönderebilmek için Android 13 ve üstünde bildirim izni almamız gerekiyor.
    Bunu nasıl yapacağınızı göstermek istiyorum.






    Öncelikle uygulama Android 13 ve üzerini destekliyorsa yani targetSdk ve compileSdk sürüm kodu 33 ve üzeri ise bu işlemi yapacağız.

    Android 13'ü desteklediğini nasıl anlarım?
    Gradle Scripts > build.gradle (Module: ******.app) dosyasını açın.
    compileSdk ve targetSdk kodunuz aşağıdaki gibi 33 veya üstü ise Android 13 sürümünü destekliyordur.



    Adım 1
    app > manifest > AndroidManifest.xml dosyasını açın.
    Aşağıdaki gibi vereceğim izin kodunu ekleyin.
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />



    Adım 2
    İzin almak için göstereceğimiz ekranı hangi activity'de görmek istiyorsak o activity'i açın.
    (Örnek olarak ben MainActivity'de göstereceğim.)

    Aşağıdaki gibi yazdığım kodu ekleyerek sizlerde bildirim göndermek için kullanıcıdan izin isteyebilirsiniz.


    private SharedPreferences Preferences; // Bildirim için izin ekranını bir kere gösterebilmek için küçük çaplı bir veri tutacağız bunun içinde SharedPreferences kullanıyoruz.
    private SharedPreferences.Editor Editor; // Bildirim izin ekranını gösterdikten sonra veri kaydetmek için Editor kullanmamız gerekiyor.
    // Burada Editor ve SharedPreferences tanımlıyoruz, Modunu Private yani özel yaptık yani diğer uygulamalardan bu veriye erişilemez yapmış olduk
    Preferences = getSharedPreferences(BuildConfig.APPLICATION_ID, Activity.MODE_PRIVATE);
    Editor = Preferences.edit();
    if (Build.VERSION.SDK_INT >= 33 && !Preferences.getBoolean("NotifyPermission", false)) { // Burada eğer android sürümü 13 ve üstü ise ve bildirim izni ekranı daha önce hiç gösterilmemişse aşağıdaki işlemleri yap diyoruz.
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) { // Burada uygulamaya bildirim izni verilmemiş ise aşağıdaki işlemleri yap diyoruz.
            ActivityResultLauncher<String> requestPermissionLauncher =
    registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> { // Bildirim izin ekranındaki kullanıcının yaptığı işlemi yani kabul ettiğini veya etmediğini döndürüyor.
                        if (isGranted) // eğer izin verdiyse alttaki yazıyı gösteriyor.
                            Toast.makeText(this, "Tebrikler! Uygulamanın bildirimlerini alacaksınız.", Toast.LENGTH_SHORT).show();
                        else // eğer izin vermediyse alttaki yazıyı gösteriyor.
                            Toast.makeText(this, "Üzgünüz! Uygulamanın bildirimlerini alamayacaksınız.", Toast.LENGTH_SHORT).show();
                        Editor.putBoolean("NotifyPermission", true); // Bildirim izin ekranı gösterildiği için veriye true değerini atıyoruz.
                        Editor.apply(); // Değeri kaydediyoruz.
                    });
            requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS); // Bildirim izin ekranını gösteriyoruz.
        }
    }
    Kodun Tamamı
    public class MainActivity extends AppCompatActivity {
    
    private SharedPreferences Preferences;
    private SharedPreferences.Editor Editor;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    Preferences = getSharedPreferences(BuildConfig.APPLICATION_ID, Activity.MODE_PRIVATE);
    Editor = Preferences.edit();
    
    if (Build.VERSION.SDK_INT >= 33 && !Preferences.getBoolean("NotifyPermission", false)) {
    if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
    ActivityResultLauncher<String> requestPermissionLauncher =
    registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
    if (isGranted)
    Toast.makeText(this, "Tebrikler! Uygulamanın bildirimlerini alacaksınız.", Toast.LENGTH_SHORT).show();
    else
    Toast.makeText(this, "Üzgünüz! Uygulamanın bildirimlerini alamayacaksınız.", Toast.LENGTH_SHORT).show();
    Editor.putBoolean("NotifyPermission", true);
    Editor.apply();
    });
    requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS);
    }
    }
    }
    }
    Eğer POST_NOTIFICATIONS tanımlanmadı hatası alırsanız.
    Aşağıdaki gibi
    import android.Manifest;
    ekleyin
  • 18-01-2023, 16:05:11
    #2
    Teşekkürler. inceleyeceğim.
  • 06-12-2023, 10:22:01
    #3
    Üyeliği durduruldu
    bilgi için teşekkürler hocam bir uygulama satin aldim apk build edince bu hatayı alıyorum çözümünü biliyor musunuz acaba
  • 06-12-2023, 10:30:16
    #4
    yusuftepe adlı üyeden alıntı: mesajı görüntüle
    bilgi için teşekkürler hocam bir uygulama satin aldim apk build edince bu hatayı alıyorum çözümünü biliyor musunuz acaba
    Özelden anydesk iletin kontrol edelim hocam
  • 06-12-2023, 11:04:07
    #5
    Gayet faydalı. Çok teşekkür ederiz.
  • 06-12-2023, 16:55:51
    #6
    Kategori Moderatörü
    Merhaba,
    Bilgilendirme için teşekkürler, gayet güzel bir konu olmuş.
    Alternatif olarak daha basit bir yolu mevcut. Projenize Onesignal sdk ekledikten sonra MainActivity sayfasına " OneSignal.promptForPushNotifications(); "şu kodu eklerseniz tüm işlemleri otomatik ayarlayacaktır.

    https://documentation.onesignal.com/...r-update-guide