Android 6.0’da Firebase ile Push Mesajları Gönderme Sorunu ve Çözümü
Android 6.0 (Marshmallow) ve sonraki sürümlerinde, Firebase ile push mesajları gönderirken sorunlar yaşanabilir. Bu sorun, Google’ın Android 6.0’da uygulama izinleri için yeni bir model olan “Uygulama İzinleri”ni tanıtmış olmasından kaynaklanmaktadır.
Sorunun Nedeni
Android 6.0’dan önce, uygulamalar push mesajları almak için otomatik olarak izin alırdı. Ancak Android 6.0’da, uygulamaların push mesajları almak için açıkça izin alması gerekir. Bu izin, kullanıcı tarafından uygulama ilk çalıştırıldığında verilir.
Uygulama, kullanıcıdan push mesajları alma izni almazsa, Firebase Cloud Messaging (FCM) hizmeti push mesajlarını cihaza teslim edemez. Bu da push mesajlarının gönderilmemesine neden olur.
Çözüm
Android 6.0 ve sonraki sürümlerinde Firebase ile push mesajları göndermek için aşağıdaki adımları izleyin:
- Uygulama İzinlerini İsteyin: Uygulamanızın
AndroidManifest.xml
dosyasına aşağıdaki izinleri ekleyin:
xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
- Kullanıcıdan İzin İsteyin: Uygulamanızın ilk çalıştırıldığında, kullanıcıdan push mesajları alma izni isteyin. Bunu,
ActivityCompat.requestPermissions()
yöntemini kullanarak yapabilirsiniz. Örneğin:
java
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECEIVE_BOOT_COMPLETED}, REQUEST_CODE);
- İzin Sonucunu İşleyin: Kullanıcı izin isteğinize yanıt verdiğinde, sonucu
onRequestPermissionsResult()
yönteminde işleyin. Kullanıcı izin verirse, FCM hizmetini başlatın. Örneğin:
java
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startFcmService();
}
}
- FCM Hizmetini Başlatın: Kullanıcı izin verdiğinde, FCM hizmetini başlatın. Bunu,
FirebaseMessaging.getInstance().subscribeToTopic("topic_name")
yöntemini kullanarak yapabilirsiniz. Örneğin:
java
private void startFcmService() {
FirebaseMessaging.getInstance().subscribeToTopic("topic_name");
}
Faydalı Kaynaklar
Sonuç
Android 6.0 ve sonraki sürümlerinde Firebase ile push mesajları göndermek için, uygulamanızın push mesajları alma izni alması gerekir. Bu izin, kullanıcı tarafından uygulama ilk çalıştırıldığında verilir. Uygulamanız izin istemezse, FCM hizmeti push mesajlarını cihaza teslim edemez. Bu sorunu çözmek için, bu makalede açıklanan adımları izleyin.