iOS uygulamalarına push bildirimleri ekleme

1. Giriş

Son Güncelleme Tarihi: 6.1.2020

Firebase Cloud Messaging (FCM), ücretsiz olarak güvenle mesaj göndermenizi sağlayan, platformlar arası bir mesajlaşma çözümüdür.

FCM'yi kullanarak bir istemci uygulamasına, yeni e-postanın veya diğer verilerin senkronize edilmeye hazır olduğunu bildirebilirsiniz. Kullanıcıların yeniden etkileşimini sağlamak ve kullanıcıları elde tutmak için bildirim mesajları gönderebilirsiniz. Anlık mesajlaşma gibi kullanım örneklerinde, mesajlar istemci uygulamasına 4 KB'a kadar yük aktarabilir.

İşleyiş şekli

FCM uygulaması, gönderme ve alma için iki ana bileşen içerir:

  1. Firebase için Cloud Functions gibi güvenilir bir ortam veya mesaj derlemek, hedeflemek ve göndermek için bir uygulama sunucusu.
  2. İlgili platforma özel aktarım hizmeti üzerinden ileti alan iOS, Android veya web (JavaScript) istemci uygulaması.

FCM Mimarisine Genel Bakış

6636933bbe959ef2.png

FCM, iletileri oluşturan, aktaran ve alan aşağıdaki bileşenlere dayanır:

  1. Mesaj isteği oluşturma veya derleme araçları. Bildirim oluşturucu, bildirim istekleri oluşturmak için GUI tabanlı bir seçenek sağlar. Tüm mesaj türlerinde tam otomasyon ve destek için mesaj isteklerini, Firebase Admin SDK'yı veya FCM sunucu protokollerini destekleyen güvenilir bir sunucu ortamında oluşturmanız gerekir. Bu ortam; Firebase için Cloud Functions, Google App Engine veya kendi uygulama sunucunuz olabilir.
  2. Diğer işlevlerin yanı sıra mesaj isteklerini kabul eden, mesajları konular aracılığıyla yayan ve mesaj kimliği gibi mesaj meta verileri oluşturan FCM arka ucu.
  3. Mesajı hedeflenen cihaza yönlendiren, mesaj teslimini gerçekleştiren ve uygun durumlarda platforma özel yapılandırma uygulayan platform seviyesinde aktarım katmanı. Bu taşıma katmanı şunları içerir:
  • Google Play Hizmetleri yüklü Android cihazlar için Android aktarım katmanı (ATL)
  • iOS cihazlar için Apple Anında Bildirim hizmeti (APN'ler)
  • Web uygulamaları için web push protokolü
  1. Kullanıcının cihazında bildirimin gösterildiği veya mesajın, uygulamanın ön plan/arka plan durumuna ve ilgili uygulama mantığına göre işlendiği FCM SDK'sı.

Oluşturacaklarınız

Bu codelab'de, FCM ile örnek bir iOS uygulamasına push bildirimi ekleyeceksiniz.

Neler öğreneceksiniz?

  • Bir kullanıcının push mesajlaşmaya abone olma ve abonelikten çıkma
  • Gelen push mesajları nasıl işlenir?
  • Bildirim nasıl görüntülenir?
  • Bildirim tıklamalarına nasıl yanıt verilir?

Gerekenler

  • Xcode 11.0 veya sonraki sürümler
  • CocoaPods 1.9.0 veya sonraki sürümler
  • Apple Geliştirici Hesabı
  • Uygulamanızı çalıştıracak fiziksel bir iOS cihaz
  • Temel Swift bilgisi

2. Kurulum

Örnek kodu indirin

Bu codelab'de kendi test uygulamanızı derleyeceksiniz. Ancak mevcut örnek uygulamayı görmek ve çalıştırmak istiyorsanız hızlı başlangıç örnek kodunu indirebilirsiniz.

Örneği almanın iki yolu vardır:

  • Git deposunu klonlayın:
$ git clone https://github.com/firebase/quickstart-ios.git
  • ZIP dosyasını indirin:

Kaynağı ZIP dosyası olarak indirirseniz paketten çıkardığınızda quickstart-ios kök klasörüne sahip olursunuz.

Yeni uygulama oluşturma

Aşağıdaki adımları uygulayarak kendi test uygulamanızı oluşturun (aşağıdaki adımlar XCode 12.3'tedir):

  1. XCode'u açın ve Yeni bir Xcode projesi oluştur'u seçin.
  2. Uygulama'yı seçin ve İleri'yi tıklayın.

e56c631b086c6d8.png

  1. Product Name (Ürün Adı) girin (ör. MessagingExample)
  2. Ekip'i seçin (Ekip oluşturmadıysanız Apple Geliştirici Hesabı'nda yapılandırın).
  3. Kuruluş Tanımlayıcısı girin (ör. com.your-name)
  4. Paket Tanımlayıcı'yı girin (ör. com.your-name.MessagingExample ise tüm iOS uygulamaları arasında benzersiz olmalıdır).
  5. Arayüz açılır listesinden Resimli Taslak'ı seçin.
  6. Yaşam Döngüsü açılır menüsünde UIKit Uygulaması Yetkisi'ni seçin.
  7. Dil bölümünde Swift'i seçin.
  8. İleri'yi tıklayın.

fb860c0fa4a02818.png

APN anahtarı oluşturup uygulamanızı Firebase projenize kaydederken paket kimliği gerekir.

3. APN'leri yapılandırma

Kimlik doğrulama anahtarını oluşturma

Bu bölümde, push bildirimleri için etkinleştirilmiş bir uygulama kimliği için kimlik doğrulama anahtarının nasıl oluşturulacağı açıklanmaktadır. Mevcut bir anahtarınız varsa yenisini oluşturmak yerine o anahtarı kullanabilirsiniz.

Kimlik doğrulama anahtarı oluşturmak için:

  1. Geliştirici hesabınızda Sertifikalar, Tanımlayıcılar ve Profiller'i tıklayın ve Anahtarlar'a gidin.

19ae87d0f00402b1.png

  1. Sağ üst köşedeki Ekle düğmesini (+) tıklayın.

c4acd10dbc4f721f.png

  1. APNs Kimlik Doğrulama Anahtarı için açıklama girin
  2. Anahtar Hizmetleri bölümünde, APN'ler onay kutusunu seçin ve Devam'ı tıklayın.

6a3e8ff7457a8251.png

  1. Kaydol'u ve ardından İndir'i tıklayın. Anahtarınızı güvenli bir yere kaydedin. Bu tek seferlik bir indirme işlemidir ve anahtar daha sonra alınamaz.

42c205e072fbd622.png

Uygulama kimliği oluşturma

Uygulama Kimliği, bir uygulamayı benzersiz şekilde tanımlayan bir tanımlayıcıdır. Geleneksel olarak, ters çevrilen bir alan adıyla temsil edilir.

  1. Apple Developer Member Center'a (Apple Geliştirici Üye Merkezi) gidin ve oturum açın.
  2. Sertifikalar, Tanımlayıcılar ve Profiller'e gidin.
  3. Tanımlayıcılar'a gidin.
  4. Yeni bir Uygulama Kimliği oluşturmak için + düğmesini tıklayın. e04fc394c52a866f.png
  5. Uygulama Kimlikleri radyo düğmesini seçip Devam'ı tıklayın.

d454fd5df3b8d93d.png

  1. Uygulama'yı seçip Devam'ı tıklayın.

3bd2e836be5e0291.png

  1. Yeni Uygulama Kimliği oluşturmak için:
  2. Uygulama kimliğiniz için bir Ad girin.
  3. Ekip Kimliği girin. Bu değer, Üyelik sekmesindeki Ekip Kimliği ile eşleşmelidir.
  4. App ID Soneki bölümünde Uygunsuz Uygulama Kimliği'ni seçin, ardından Paket Kimliğinizi girin. 7363c4d1962b486d.png
  5. Uygulama Hizmetleri bölümünde Push Bildirimleri'nin işaretli olduğundan emin olun. 552ea08703f7e323.png
  6. Continue (Devam) seçeneğini tıklayın ve girdiğiniz bilgilerin doğru olup olmadığını kontrol edin:
  7. Tanımlayıcı değeri, Ekip Kimliği ve Paket Kimliği değerlerinin birleşimiyle eşleşmelidir
  8. Push Bildirimleri Yapılandırılabilir olmalıdır
  9. Uygulama kimliğini oluşturmak için Kaydol'u tıklayın.

Profili oluşturma

Uygulamanızı geliştirme aşamasında test etmek için, cihazlarınızı henüz App Store'da yayınlanmamış bir uygulamayı çalıştıracak şekilde yetkilendirmek üzere bir geliştirme profiline ihtiyacınız vardır.

  1. Apple Developer Member Center'a (Apple Geliştirici Üye Merkezi) gidin ve oturum açın.
  2. Sertifikalar, Tanımlayıcılar ve Profiller'e gidin.
  3. Sol üst köşedeki açılır menüden seçili değilse iOS, tvOS, watchOS'i seçin, ardından Profiller'e gidin.
  4. Yeni bir Profil oluşturmak için + düğmesini tıklayın. 1fa2342cfe45a925.png
  5. Temel hazırlık profili türü olarak iOS Uygulama Geliştirme'yi seçin ve ardından Devam'ı tıklayın.

507434a466220dfe.png

  1. Açılır menüden kullanmak istediğiniz uygulama kimliğini seçip Devam'ı tıklayın.
  2. Önceki adımda seçtiğiniz Uygulama Kimliğinin iOS Geliştirme sertifikasını seçin, ardından Devam'ı tıklayın.
  3. Temel Hazırlık Profili'ne eklemek istediğiniz iOS cihazları seçip Devam'ı tıklayın. Testiniz için kullanmak istediğiniz tüm cihazları seçtiğinizden emin olun.
  4. Bu temel hazırlık profili için bir ad girin (ör. MessagingExampleProfile) ve Oluştur'u tıklayın.

4395f04647afa997.png

  1. Temel Hazırlık Profili'ni Mac'inize kaydetmek için İndir'i tıklayın.

106761fa786ba580.png

  1. Temel Hazırlık Profili dosyasını çift tıklayarak yükleyin.

4. Firebase, iOS projenize ekleniyor

Firebase projesi oluşturma

Firebase'i iOS uygulamanıza eklemeden önce iOS uygulamanıza bağlanacak bir Firebase projesi oluşturmanız gerekir. Firebase projeleri hakkında daha fazla bilgi edinmek için Firebase Projelerini Anlama sayfasını ziyaret edin.

  1. Firebase konsolunda Proje ekle'yi tıklayın, ardından Proje adı seçin veya girin. e462afd91c149238.png

Mevcut bir Google Cloud Platform (GCP) projeniz varsa, Firebase kaynaklarını bu projeye eklemek için açılır menüden projeyi seçebilirsiniz.

  1. (İsteğe bağlı) Yeni bir proje oluşturuyorsanız Proje Kimliği'ni düzenleyebilirsiniz.

Firebase, Firebase projenize otomatik olarak benzersiz bir kimlik atar. Firebase'in proje kimliğini nasıl kullandığı hakkında bilgi edinmek için Firebase Projelerini Anlama sayfasını ziyaret edin.

  1. Devam'ı tıklayın.
  2. Projeniz için Google Analytics'i ayarlayın. Bu sayede, aşağıdaki Firebase ürünlerinden herhangi birini kullanırken optimum deneyim elde edebilirsiniz:
  • Firebase Crashlytics
  • Firebase Predictions
  • Firebase Cloud Messaging
  • Firebase Uygulama İçi Mesajlaşma
  • Firebase Remote Config
  • Firebase A/B Testi

İstendiğinde, mevcut bir Google Analytics hesabını kullanmayı veya yeni bir hesap oluşturmayı seçin. Yeni bir hesap oluşturmayı seçerseniz Analytics raporlama konumunuzu seçip projeniz için veri paylaşım ayarlarını ve Google Analytics şartlarını kabul edin.

1282a798556779ab.png

48ade68c8de27d2.png

  1. Proje oluştur'u (veya mevcut bir GCP projesini kullanıyorsanız Firebase ekle'yi) tıklayın.

Firebase, Firebase projeniz için kaynakları otomatik olarak sağlar. İşlem tamamlandığında, Firebase konsolunda Firebase projenizin genel bakış sayfasına yönlendirilirsiniz.

Uygulamanızı Firebase'e kaydetme

Firebase projeniz olduğunda iOS uygulamanızı bu projeye ekleyebilirsiniz.

Birden fazla derleme varyantının nasıl ele alınacağı da dahil olmak üzere Firebase projesine uygulama eklemeyle ilgili en iyi uygulamalar ve dikkat edilmesi gereken noktalar hakkında daha fazla bilgi edinmek için Firebase Projelerini Anlama sayfasını ziyaret edin.

  1. Firebase konsoluna gidin.
  2. Kurulum iş akışını başlatmak için projeye genel bakış sayfasının ortasındaki iOS simgesini tıklayın.

Firebase projenize daha önce uygulama eklediyseniz platform seçeneklerini görüntülemek için Uygulama ekle'yi tıklayın.

93462beb642e8987.png

  1. iOS paket kimliği alanına uygulamanızın paket kimliğini girin.
  2. (İsteğe bağlı) Diğer uygulama bilgilerini girin: Uygulama takma adı ve App Store kimliği.
  3. Uygulamayı kaydet'i tıklayın.

2e7a00b0008344c1.png

Firebase yapılandırma dosyası ekleme

  1. Firebase iOS yapılandırma dosyanızı (GoogleService-Info.plist) edinmek için GoogleService-Info.plist dosyasını indir'i tıklayın. 69004caf7d448989.png
  2. Yapılandırma dosyanızı Xcode projenizin köküne taşıyın. İstenirse yapılandırma dosyasını tüm hedeflere eklemeyi seçin.

7c5e0a46d07fa9c7.png

Projenizde birden fazla paket kimliği varsa her uygulamanın kendi GoogleService-Info.plist dosyası olabilmesi için her paket kimliğini Firebase konsolunda kayıtlı bir uygulamayla ilişkilendirmeniz gerekir.

XCode'u kapatın.

Uygulamanıza Firebase SDK'ları ekleyin

Firebase kitaplıklarını yüklemek için CocoaPods kullanmanızı öneririz. Ancak CocoaPods'u kullanmak istemezseniz SDK çerçevelerini doğrudan entegre edebilir veya Swift Package Manager beta sürümünü kullanabilirsiniz.

  1. Henüz yoksa bir Podfile oluşturun. Hızlı başlangıç örneğini kullanıyorsanız Xcode projesi ve Podfile (kapsüllerle birlikte) zaten mevcuttur.
$ cd MessagingExample
$ pod init
  1. Uygulamanızda kullanmak istediğiniz Firebase kapsüllerini Podfile'ınıza ekleyin.

Desteklenen Firebase ürünlerinden herhangi birini iOS uygulamanıza ekleyebilirsiniz.

Hızlı başlangıç örneğinde Google Analytics ve Firebase Cloud Messaging SDK'ları eklenmiştir.

# Add the Firebase pod for Google Analytics
pod 'Firebase/Analytics'

# Add the pod for Firebase Cloud Messaging
pod 'Firebase/Messaging'
  1. Kapsülleri yükleyin, ardından projeyi Xcode'da görmek için .xcworkspace dosyanızı açın:
$ pod install
  1. MessagingExample.xcworkspace uygulamasını açın ve Firebase konsolunda İleri'yi tıklayın. 6d1f8230d16693e6.png

Uygulamanızda Firebase'i ilk kullanıma hazırlama

Firebase başlatma kodunu uygulamanıza eklemeniz gerekir.

Firebase modülünü içe aktarın ve paylaşılan bir örnek yapılandırın (Hızlı başlangıç örneğinde, Firebase modülü zaten içe aktarılmıştır).

  1. Firebase modülünü UIApplicationDelegate cihazınıza aktarın:

AppDelegate.swift

import UIKit
import Firebase // Add this line
  1. Genellikle uygulamanızın application:didFinishLaunchingWithOptions: yönteminde, bir FirebaseApp paylaşılan örneği yapılandırın:

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  FirebaseApp.configure() // Add this line
  return true
}
  1. Firebase konsolunda İleri'yi tıklayın. f9d37423d346ff0.png
  2. Firebase SDK'ları uygulamanıza eklenir. Konsola devam et'i tıklayın. d1b1309cd3790f66.png

5. FCM istemcisini yapılandırma

APN kimlik doğrulama anahtarınızı yükleyin

APNs kimlik doğrulama anahtarınızı Firebase'e yükleyin.

  1. Firebase konsolunda projenizin içinde, dişli simgesini, Proje Ayarları'nı ve ardından Cloud Messaging sekmesini seçin. ba8b5f95241327fe.png
  2. iOS uygulaması yapılandırması bölümündeki APN kimlik doğrulama anahtarı'nda Yükle düğmesini tıklayın. 357ddc0d4b182492.png
  3. Anahtarınızı kaydettiğiniz konuma gidin, anahtarı seçin ve 'ı tıklayın. Anahtarın anahtar kimliğini ekleyin (Apple Geliştirici Üye Merkezi'ndeki Sertifikalar, Tanımlayıcılar ve Profiller bölümünde bulunur) ve Yükle'yi tıklayın. 3dae27f2327daf9e.png

Uzaktan bildirimlere kaydol

Başlangıçta veya uygulama akışınızda istediğiniz noktada uygulamanızı uzaktan bildirimler için kaydedin.

Hızlı başlangıç örneğinde registerForRemoteNotifications zaten eklenmiş.

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  FirebaseApp.configure()
  // [START register for remote notifications]
  if #available(iOS 10.0, *) {
    // For iOS 10 display notification (sent via APNS)
    UNUserNotificationCenter.current().delegate = self
        
    let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
    UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: {_, _ in })
  } else {
    let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
    application.registerUserNotificationSettings(settings)
  }

  application.registerForRemoteNotifications()
  // [END register for remote notifications]
  return true
}

Bu satırları AppDelegate.swift dosyasının sonuna ekleyerek UNUserNotificationCenter öğesinin yetki verilen mülkünü atayın.

AppDelegate.swift

@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {

  // Receive displayed notifications for iOS 10 devices.
  func userNotificationCenter(_ center: UNUserNotificationCenter,
                              willPresent notification: UNNotification,
    withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    let userInfo = notification.request.content.userInfo

    // Print full message.
    print(userInfo)

    // Change this to your preferred presentation option
    completionHandler([[.alert, .sound]])
  }

  func userNotificationCenter(_ center: UNUserNotificationCenter,
                              didReceive response: UNNotificationResponse,
                              withCompletionHandler completionHandler: @escaping () -> Void) {
    let userInfo = response.notification.request.content.userInfo

    // Print full message.
    print(userInfo)

    completionHandler()
  }
}

Mesajlaşma yetkisini ayarlama

Kayıt jetonları almak için mesajlaşma yetki verme protokolünü uygulayın ve [FIRApp configure] çağrısından sonra FIRMessaging öğesinin delegate özelliğini ayarlayın. Örneğin, uygulama temsilciniz mesajlaşma yetki verme protokolüne uygunsa application:didFinishLaunchingWithOptions: üzerindeki yetkiyi kendisinin olarak ayarlayabilirsiniz (Hızlı başlangıç örneğinde zaten ayarlanmıştır).

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  FirebaseApp.configure()
  Messaging.messaging().delegate = self // Add this line
  // [START register for remote notifications]
  if #available(iOS 10.0, *) {
    // For iOS 10 display notification (sent via APNS)
    UNUserNotificationCenter.current().delegate = self
        
    let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
    UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: {_, _ in })
  } else {
    let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
    application.registerUserNotificationSettings(settings)
  }

  application.registerForRemoteNotifications()
  // [END register for remote notifications]
  return true
}

Bu satırları AppDelegate.swift dosyasının sonuna ekleyerek FIRMessaging öğesinin yetki verilen mülkünü atayın.

AppDelegate.swift

extension AppDelegate : MessagingDelegate {
  func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
    print("Firebase registration token: \(String(describing: fcmToken))")
    
    let dataDict:[String: String] = ["token": fcmToken ?? ""]
    NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)
  }
}

Özellik Ekleme

Uygulama Kimliği Oluşturma bölümünde push bildirimleri özelliğini eklediniz. Ancak aşağıdaki adımları uygulayarak bu özelliği XCode'a da eklemeniz gerekir (aşağıdaki adımlar XCode 12.3'te verilmiştir):

  1. Gezgin Alanı'nda proje adını tıklayın.
  2. İmzalama ve Özellikler.
  3. + Özellik'i tıklayın.

eaf41aefb3bf2c9e.png

  1. Arka Plan Modları'nı çift tıklayın.
  2. + Özellik'i tekrar tıklayın.
  3. Push Bildirimleri'ni çift tıklayın.
  4. Arka Plan Modları bölümlerinde Uzaktan bildirimler'i işaretleyin.

e5d0fc08651e04a9.png

6. Bildirim mesajı gönder

Aşağıdaki adımları uygulayarak bir test mesajı gönderebilirsiniz:

  1. Uygulamayı hedef cihaza yükleyip çalıştırın. Uzaktan bildirim almak için izin isteğini kabul etmeniz gerekir.
  2. XCode günlüğünde kayıt jetonunu alın.

a2e49a92f9807d34.png

  1. Uygulamanın cihazda arka planda bulunduğundan emin olun.
  2. Bildirim oluşturucu'yu açın ve Yeni bildirim'i seçin.
  3. Mesaj metnini girin. f485d7fbd2456ae0.png.
  4. Test mesajı gönder'i seçin.
  5. FCM kayıt jetonu ekleyin etiketli alana, 2. adımda aldığınız kayıt jetonunu girin.
  6. Test et'i tıklayın.

Test et'i tıkladıktan sonra, hedeflenen istemci cihazın (uygulama arka planda çalışırken) bildirim merkezinde bildirimi alması gerekir.

Uygulamanıza mesaj teslimiyle ilgili analiz için iOS ve Android cihazlarda gönderilen ve açılan mesaj sayısını kaydeden FCM raporlama kontrol paneline bakın.

6570eea7b5228513.png

7. Tebrikler

Tebrikler, test mesajını başarıyla gönderdiniz.

FCM'de, konu aboneliği gibi daha birçok işlev ve yapılandırma vardır.

Bunlarla ilgileniyorsanız resmi geliştirici dokümanına göz atın.

Sırada ne var?

Bu codelab'lerden bazılarına göz atın.

Daha fazla bilgi