iOS push bildirimleri, iOS uygulamanızda sürekli kullanıcı etkileşimi ve elde tutmayı artırmak için esastır. Kullanıcılarınıza gerçek zamanlı güncellemeler, hatırlatmalar ve kişiselleştirilmiş mesajlar doğrudan iletmenizi sağlayarak uygulamanızın genel kullanıcı deneyimini ve bağlılığını iyileştirir. OneSignal’ın SDK’sını uygulamanızla entegre ederek, bildirimlerinizin iOS cihazlarda sorunsuz bir şekilde iletilmesini sağlamak için Apple Push Notification Service (APNS) avantajlarından yararlanabilirsiniz. Bu kılavuz, SDK’mızı iOS uygulamanıza entegre etme konusunda size yol gösterecektir.
Create a new app by clicking New App/Website, or add a platform to an existing app in Settings > Push & In-App. Select the platform(s) you want to configure and click Next: Configure Your Platform.
Click Save & Continue after entering your credentials.
3
Save your App ID and install the SDK
Your App ID is displayed on the final screen. Copy and save it — you need it when initializing the SDK. Select your SDK platform, then follow the setup guide.
OneSignal_app_groups_key değerini hem App Target hem de OneSignalNotificationServiceExtension Target’ın Info.plist dosyasında güncellediğinizden emin olun!
Özel bir App Group adı kullanıyorsanız ve group.your_bundle_id.onesignal kullanmıyorsanız, App Group ID’nizi hem App Target hem de OneSignalNotificationServiceExtension Target’ın Info.plist dosyasına eklediğinizden emin olun! Daha fazla bilgi için 3. adıma bakın.
NotificationService.swift veya NotificationService.m dosyasının içeriğini aşağıdakilerle değiştirin:
import UserNotificationsimport OneSignalExtensionclass NotificationService: UNNotificationServiceExtension { var contentHandler: ((UNNotificationContent) -> Void)? var receivedRequest: UNNotificationRequest! var bestAttemptContent: UNMutableNotificationContent? // Note this extension only runs when `mutable_content` is set // Setting an attachment or action buttons automatically sets the property to true override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { self.receivedRequest = request self.contentHandler = contentHandler self.bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) if let bestAttemptContent = bestAttemptContent { // DEBUGGING: Uncomment the 2 lines below to check this extension is executing// print("Running NotificationServiceExtension")// bestAttemptContent.body = "[Modified] " + bestAttemptContent.body OneSignalExtension.didReceiveNotificationExtensionRequest(self.receivedRequest, with: bestAttemptContent, withContentHandler: self.contentHandler) } } override func serviceExtensionTimeWillExpire() { // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { OneSignalExtension.serviceExtensionTimeWillExpireRequest(self.receivedRequest, with: self.bestAttemptContent) contentHandler(bestAttemptContent) } }}
#import <OneSignalExtension/OneSignalExtension.h>#import "NotificationService.h"@interface NotificationService ()@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);@property (nonatomic, strong) UNNotificationRequest *receivedRequest;@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;@end@implementation NotificationService// Note, this extension only runs when mutable-content is set// Setting an attachment or action buttons automatically adds this- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { self.receivedRequest = request; self.contentHandler = contentHandler; self.bestAttemptContent = [request.content mutableCopy]; // DEBUGGING: Uncomment the 2 lines below and comment out the one above to ensure this extension is executing// NSLog(@"Running NotificationServiceExtension");// self.bestAttemptContent.body = [@"[Modified] " stringByAppendingString:self.bestAttemptContent.body]; [OneSignalExtension didReceiveNotificationExtensionRequest:self.receivedRequest withMutableNotificationContent:self.bestAttemptContent withContentHandler:self.contentHandler];}- (void)serviceExtensionTimeWillExpire { // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. [OneSignalExtension serviceExtensionTimeWillExpireRequest:self.receivedRequest withMutableNotificationContent:self.bestAttemptContent]; self.contentHandler(self.bestAttemptContent);}@end
OneSignal paketi yüklü olmadığı için bir hata görmelisiniz. Bu, bir sonraki adımda çözülecektir.
Bu bölüm, OneSignal’ın temel özelliklerini entegre etmeniz konusunda size rehberlik edecektir. Bu bölümün sonunda, uygulama içi mesajları tetiklemenize ve push bildirimleri almanıza olanak tanıyan SDK’mızla temel bir entegrasyona sahip olacaksınız.
SDK’mızı Xcode Package Dependencies Manager (Swift Package Manager) veya CocoaPods kullanarak ekleyin. 4 mevcut kütüphane vardır. Uygulama içi mesajlar ve/veya Konum takibi istemiyorsanız, bu paketleri atlayabilirsiniz.
Kütüphane
Hedef
Gereklilik
OneSignalExtension
OneSignalNotificationServiceExtension
✅
OneSignalFramework
App
✅
OneSignalInAppMessages
App
Önerilen
OneSignalLocation
App
İsteğe bağlı
Xcode Package Dependencies
CocoaPods
File > Add Package Dependencies… bölümüne gidin ve OneSignal SDK deposunun URL’sini girin:https://github.com/OneSignal/OneSignal-XCFrameworkonesignal-xcframework paketini seçin ve Add Package tıklayın.OneSignal-XCFramework için Package Products seçin.
# If platform is uncommented, set to the same value as your minimum deployment target in Xcode # platform :ios, '15.0' target 'your_project_name' do pod 'OneSignal/OneSignal', '>= 5.2.9', '< 6.0' # If your app does not use In-App messages, you can remove this: pod 'OneSignal/OneSignalInAppMessages', '>= 5.2.9', '< 6.0' # If your app does not use CoreLocation, you can remove this: pod 'OneSignal/OneSignalLocation', '>= 5.2.9', '< 6.0' # Your other pods here end target 'OneSignalNotificationServiceExtension' do pod 'OneSignal/OneSignal', '>= 5.2.9', '< 6.0' end
Bağımlılıkları ana uygulama hedefi ve OneSignalNotificationServiceExtension hedefine ekleyin. platform satırının yorumu kaldırılmışsa, Xcode’daki minimum dağıtım hedefi ile aynı değer olduğundan emin olun.OneSignal iOS SDK pod’unu indirmek ve projenize eklemek için aşağıdaki komutu çalıştırın:pod repo update && pod installKurulum tamamlandıktan sonra, projenizin adını taşıyan XCWorkspace dosyasını açtığınızdan emin olun (örn., <proje-adı>.xcworkspace)
OneSignal iOS SDK pod’unu kullanırken, projeyi açmak için yalnızca .xcworkspace dosyasını kullanmalısınız.
Aşağıdaki hatalarla karşılaşabilirsiniz, bunları nasıl çözebileceğiniz aşağıda açıklanmıştır.
ArgumentError - \[Xcodeproj] Unable to find compatibility version string for
object version `70`.
CocoaPods, Xcode proje dosyalarınızı okumak için xcodeproj Ruby gem’ine dayanır. Şu anda, en son xcodeproj sürümü Xcode 16 tarafından tanıtılan object version 70’i tanımamaktadır. Bu nedenle CocoaPods .xcodeproj dosyanızı açmaya çalıştığında, bu hatayla çöker.
Xcode arayüz kurulumunuza bağlı olarak, bu seçenekleri izleyerek OneSignal’ı başlatın.
SwiftUI
Storyboard
SwiftUI arayüzü kullanıyorsanız, <APP_NAME>App.swift dosyanıza gidin ve sağlanan yöntemlerle OneSignal’ı başlatın.YOUR_APP_ID değerini OneSignal panonuzda Settings > Keys & IDs bölümünde bulunan OneSignal App ID’niz ile değiştirin. OneSignal uygulamasına erişiminiz yoksa, Ekip Üyelerinizden sizi davet etmelerini isteyin.
import SwiftUIimport OneSignalFramework@mainstruct YOURAPP_NAME: App { //Connect the SwiftUI app to the UIKit app delegate @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate var body: some Scene { WindowGroup { ContentView() } }}class AppDelegate: NSObject, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { // Enable verbose logging for debugging (remove in production) OneSignal.Debug.setLogLevel(.LL_VERBOSE) // Initialize with your OneSignal App ID OneSignal.initialize("YOUR_APP_ID", withLaunchOptions: launchOptions) // Use this method to prompt for push notifications. // We recommend removing this method after testing and instead use In-App Messages to prompt for notification permission. OneSignal.Notifications.requestPermission({ accepted in print("User accepted notifications: \(accepted)") }, fallbackToSettings: false) return true }}
Storyboard arayüzü kullanıyorsanız, AppDelegate dosyanıza gidin ve sağlanan yöntemlerle OneSignal’ı başlatın.YOUR_APP_ID değerini OneSignal panonuzda Settings > Keys & IDs bölümünde bulunan OneSignal App ID’niz ile değiştirin. OneSignal uygulamasına erişiminiz yoksa, Ekip Üyelerinizden sizi davet etmelerini isteyin.
//AppDelegate.swiftimport UIKitimport OneSignalFramework@UIApplicationMainclass AppDelegate: UIResponder, UIApplicationDelegate {func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:[UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Enable verbose logging for debugging (remove in production) OneSignal.Debug.setLogLevel(.LL_VERBOSE) // Initialize with your OneSignal App ID OneSignal.initialize("YOUR_APP_ID", withLaunchOptions: launchOptions) // Use this method to prompt for push notifications. // We recommend removing this method after testing and instead use In-App Messages to prompt for notification permission. OneSignal.Notifications.requestPermission({ accepted in print("User accepted notifications: \(accepted)") }, fallbackToSettings: false) return true}// Remaining contents of your AppDelegate Class...}
#import <OneSignalFramework/OneSignalFramework.h>@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Enable verbose logging for debugging (remove in production) [OneSignal.Debug setLogLevel:ONE_S_LL_VERBOSE]; // Initialize with your OneSignal App ID [OneSignal initialize:@"YOUR_APP_ID" withLaunchOptions:launchOptions]; // Use this method to prompt for push notifications. // We recommend removing this method after testing and instead use In-App Messages to prompt for notification permission. [OneSignal.Notifications requestPermission:^(BOOL accepted) { NSLog(@"User accepted notifications: %d", accepted); } fallbackToSettings:false]; // Login your customer with externalId // [OneSignal login:@"EXTERNAL_ID"]; return YES;}
Bu kılavuz, push bildirimleri, abonelik kaydı ve uygulama içi mesajlaşmayı test ederek OneSignal SDK entegrasyonunuzun doğru çalıştığını doğrulamanıza yardımcı olur.
Başarıyla bir mobil abonelik oluşturdunuz.
Mobil abonelikler, kullanıcılar uygulamanızı bir cihazda ilk kez açtığında veya aynı cihazda uygulamanızı kaldırıp yeniden yüklediklerinde oluşturulur.
Aşağıdaki koddaki YOUR_APP_API_KEY ve YOUR_APP_ID değerlerini gerçek anahtarlarınızla değiştirin. Bu kod, daha önce oluşturduğumuz Test Users segmentini kullanır.
Tüm kurulum adımları başarıyla tamamlandıysa, test abonelikleri görsel içeren bir bildirim almalıdır:
Görseller daraltılmış bildirim görünümünde küçük görünecektir. Tam görseli görmek için bildirimi genişletin.
5
Onaylanmış teslimatı kontrol edin.
Panonuzda Delivery > Sent Messages bölümüne gidin, ardından istatistikleri görmek için mesaja tıklayın.confirmed istatistiğini görmelisiniz, bu cihazın push’u aldığı anlamına gelir.
API’miz aracılığıyla bir segmente başarıyla bir bildirim gönderdiniz.
Onaylanmış teslimat yok mu? Sorun giderme kılavuzunu buradan inceleyin.
Sorun mu yaşıyorsunuz? Api isteğini ve uygulama başlatmanın başından sonuna kadar olan log’u bir .txt dosyasına kopyalayın. Ardından her ikisini de support@onesignal.com ile paylaşın.
Uygulama içi mesajlar, kullanıcılar uygulamanızı kullanırken onlarla iletişim kurmanıza olanak tanır.
1
Uygulamanızı cihazda kapatın veya arka plana alın.
Bunun nedeni, kullanıcıların yeni bir oturum başlamadan önce uygulama içi kitle kriterlerini karşılaması gerektiğidir. OneSignal’da, kullanıcı uygulamanızı en az 30 saniye arka planda veya kapalı kaldıktan sonra açtığında yeni bir oturum başlar. Daha fazla ayrıntı için uygulama içi mesajların nasıl görüntülendiği kılavuzumuza bakın.
2
Bir uygulama içi mesaj oluşturun.
OneSignal panonuzda Messages > In-App > New In-App bölümüne gidin.
Welcome mesajını bulun ve seçin.
Kitlenizi daha önce kullandığımız Test Users segmenti olarak ayarlayın.
3
İsterseniz mesaj içeriğini özelleştirin.
4
Trigger'ı 'On app open' olarak ayarlayın.
5
Sıklığı planlayın.
Schedule > How often do you want to show this message? altında Every time trigger conditions are satisfied seçeneğini seçin.
6
Mesajı yayına alın.
Test Kullanıcılarınız uygulamayı her açtığında kullanılabilir olması için Make Message Live tıklayın.
7
Uygulamayı açın ve mesajı görün.
Uygulama içi mesaj yayına alındıktan sonra, uygulamanızı açın. Şunu görüntülediğini görmelisiniz:
Mesajı görmüyor musunuz?
Yeni bir oturum başlatın
Yeniden açmadan önce uygulamayı en az 30 saniye kapatmalı veya arka plana almalısınız. Bu, yeni bir oturumun başlatılmasını sağlar.
Yeniden yüklediyseniz veya cihaz değiştirdiyseniz, cihazı Test Users’a yeniden ekleyin ve Test Users segmentinin bir parçası olduğunu onaylayın.
Sorun mu yaşıyorsunuz?
Yukarıdaki adımları tekrarlarken Hata Ayıklama Günlüğü Alma yönergelerini izleyin. Bu, support@onesignal.com ile paylaşabileceğiniz ek kayıt oluşturur ve ne olduğunu araştırmamıza yardımcı oluruz.
OneSignal SDK’yı başarıyla kurdunuz ve şunlar gibi önemli kavramları öğrendiniz:
Daha önce mobil Abonelikler oluşturmayı gösterdik. Şimdi OneSignal SDK’yı kullanarak Kullanıcıları tüm abonelikleri (push, e-posta ve SMS dahil) boyunca tanımlamaya geçeceğiz. Platformlar arası kullanıcıları birleştirmenize ve etkileşim kurmanıza yardımcı olmak için External ID’ler, etiketler, çok kanallı abonelikler, gizlilik ve olay takibini ele alacağız.
Backend’inizin kullanıcı tanımlayıcısını kullanarak cihazlar, e-posta adresleri ve telefon numaraları arasında kullanıcıları tutarlı bir şekilde tanımlamak için External ID kullanın. Bu, mesajlaşmanızın kanallar ve 3. taraf sistemler arasında birleşik kalmasını sağlar (Entegrasyonlar için özellikle önemlidir).Uygulamanız tarafından her tanımlandıklarında SDK’mızın login yöntemi ile External ID’yi ayarlayın.
OneSignal, abonelikler (Subscription ID) ve kullanıcılar (OneSignal ID) için benzersiz salt okunur ID’ler oluşturur.Kullanıcılar uygulamanızı farklı cihazlara indirdikçe, web sitenize abone oldukça ve/veya uygulamanızın dışında size e-posta adresleri ve telefon numaraları sağladıkça, yeni abonelikler oluşturulacaktır.Nasıl oluşturulduklarına bakılmaksızın, kullanıcıları tüm abonelikleri boyunca tanımlamak için SDK’mız aracılığıyla External ID’yi ayarlamanız şiddetle önerilir.
Etiketler, kullanıcı özelliklerini (username, role veya tercihler gibi) ve olayları (purchase_date, game_level veya kullanıcı etkileşimleri gibi) depolamak için kullanabileceğiniz anahtar-değer çiftleri string verilerdir. Etiketler, gelişmiş Mesaj Kişiselleştirme ve Segmentasyonu destekleyerek daha gelişmiş kullanım durumlarına olanak tanır.Uygulamanızda olaylar meydana geldikçe SDK’mız addTag ve addTags yöntemleri ile etiketleri ayarlayın.Bu örnekte, kullanıcı current_level adlı etiket tarafından tanımlanan ve 6 değerine ayarlanan 6. seviyeye ulaştı.
5 ile 10 arasında seviyeye sahip kullanıcılardan oluşan bir segment oluşturabilir ve hedeflenmiş ve kişiselleştirilmiş mesajlar göndermek için bunu kullanabiliriz:
Daha önce SDK’mızın push ve uygulama içi mesajlar göndermek için mobil abonelikler oluşturduğunu gördük. Karşılık gelen abonelikleri oluşturarak kullanıcılara e-posta ve SMS kanalları aracılığıyla da ulaşabilirsiniz.
E-posta adresi ve/veya telefon numarası OneSignal uygulamasında zaten mevcutsa, SDK bunu mevcut kullanıcıya ekler, yineleme oluşturmaz.Birleştirilmiş kullanıcıları panoda Audience > Users aracılığıyla veya View user API ile görüntüleyebilirsiniz.
Çok kanallı iletişim için en iyi uygulamalar
E-posta veya SMS abonelikleri eklemeden önce açık onay alın.
Her iletişim kanalının faydalarını kullanıcılara açıklayın.
Kullanıcıların hangi kanalları tercih ettiklerini seçebilmeleri için kanal tercihleri sağlayın.
Uygulama açılışında hemen requestPermission() çağırmak yerine, daha stratejik bir yaklaşım benimseyin. İzin istemeden önce push bildirimlerinin değerini açıklamak için uygulama içi mesaj kullanın.En iyi uygulamalar ve uygulama ayrıntıları için Push izinleri için istemde bulunma kılavuzumuza bakın.
Kullanıcı eylemlerine ve durum değişikliklerine tepki vermek için SDK dinleyicilerini kullanın.SDK, bağlanabileceğiniz birkaç olay dinleyicisi sağlar. Daha fazla ayrıntı için SDK referans kılavuzumuza bakın.
Metot swizzling’i devre dışı bırakma (isteğe bağlı)
Varsayılan olarak, OneSignal SDK push bildirimi temsilci yöntemlerini otomatik olarak işlemek için metot swizzling kullanır. Uygulamanızın swizzling’i devre dışı bırakması gerekiyorsa (örneğin, diğer SDK’larla çakışmaları önlemek veya bildirim temsilci yöntemleri üzerinde tam kontrol sağlamak için) Info.plist aracılığıyla bu özelliği devre dışı bırakabilirsiniz.Swizzling devre dışı bırakıldığında, bildirim temsilci yöntemlerini OneSignal SDK’sına manuel olarak iletmeniz gerekir. Diğer tüm SDK özellikleri (dinleyiciler, gözlemciler, uygulama içi mesajlar, sonuçlar vb.) normal şekilde çalışmaya devam eder.
Adım 2. UNUserNotificationCenter temsilcisini ayarla
OneSignal.initialize’ı çağırmadan önceAppDelegate’inizi UNUserNotificationCenter temsilcisi olarak ayarlayın. Bu olmadan, ön planda bildirim gösterimi ve bildirim dokunma işlemi çalışmayacaktır.
// In application(_:didFinishLaunchingWithOptions:), BEFORE OneSignal.initialize()UNUserNotificationCenter.current().delegate = self
// In application:didFinishLaunchingWithOptions:, BEFORE [OneSignal initialize:][UNUserNotificationCenter currentNotificationCenter].delegate = self;
onWillDisplayNotification yaşam döngüsü dinleyicisi ve preventDefault / display API’leri manuel iletimle çalışmaya devam eder. SDK, handleWillPresentNotificationInForegroundWithPayload içinden dinleyicilerinizi çağırır.
Swizzling devre dışı bırakıldığında, SDK rozet değişikliklerini engelleyemez. Rozet sayısını ayarlamak ve OneSignal’in dahili rozet önbelleğini senkronize etmek için bu yöntemi kullanın:
SwiftUI uygulamalarının varsayılan olarak bir AppDelegate’i yoktur. Bir tane eklemek için @UIApplicationDelegateAdaptor kullanın ve ardından yukarıda gösterilen tüm iletme yöntemlerini uygulayın:
Swift
@mainstruct YourApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate var body: some Scene { WindowGroup { ContentView() } }}class AppDelegate: NSObject, UIApplicationDelegate, UNUserNotificationCenterDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool { UNUserNotificationCenter.current().delegate = self OneSignal.initialize("YOUR_APP_ID", withLaunchOptions: launchOptions) return true } // Implement all the forwarding methods shown above}
Mobil push kurulumu kılavuzunu inceleyerek tüm temel özellikleri etkinleştirdiğinizden emin olun.Mevcut yöntemler ve yapılandırma seçenekleri hakkında tam ayrıntılar için Mobil SDK referansını ziyaret edin.
Tebrikler! Mobil SDK kurulum kılavuzunu başarıyla tamamladınız.
Need help?Chat with our Support team or email support@onesignal.comPlease include:
Details of the issue you’re experiencing and steps to reproduce if available
Your OneSignal App ID
The External ID or Subscription ID if applicable
The URL to the message you tested in the OneSignal Dashboard if applicable