Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.

APNS ile gelen bildirimlerin yönetimi

0 oy
79 kez görüntülendi
18, Haziran, 2015 ios development kategorisinde burhanaksendir tarafından soruldu
JSON Payload ile gönderdiğim dataları uygulamam içerisinde yakaladıktan sonra belirleyeceğim bir ViewController'in present edilmesini ve bu yakaladığım datayı da ilgili ViewController'de kullanmak istiyorum.

Bu konuda yardımınızı rica edebilir miyim ? Nereden başlamalıyım? Nasıl olmalı ?

1 cevap

+1 oy
18, Haziran, 2015 yasin tarafından cevaplandı
18, Haziran, 2015 burhanaksendir tarafından seçilmiş
 
En İyi Cevap

bildiginiz gibi apns notification'larını appDelegate içerisindeki didReceiveRemoteNotification metoduyla alıyoruz.

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    // payload'a eklediğiniz her key "aps" altında yer alıyor dolayısıyla bunun içine bakmamız lazım
    if let apsPayloadContent:AnyObject = userInfo["aps"] {

        //aps payload'ımızın içerisinde "pid" key'iyle girdiğimiz custom bir içeriğimiz olduğunu farz edelim.
        if let customData:String = apsPayloadContent["pid"] as? String {

            // aldığımız custom içeriğimizi daha sonra bir local notification'la post edelim.
            // ve elbette bir yerlere post edilen bu notification'ı karşılayabilecek bir observer ekleyeceksiniz'ki uygulama notification aldığında yapmak istediğiniz aksiyon tetiklenebilsin.
            NSNotificationCenter.defaultCenter().postNotificationName("remoteNotificationReceived", object: customData)
        }
    }
}

şimdi viewController'içerisinde neler yaptığımıza bir bakalım;

override func viewDidLoad() {
        super.viewDidLoad()    
// örnek vermek gerekirse mainViewController'ımız içerisinde bu local notification'ı karşılayabilecek ve yapmak istediğiniz aksiyonu tetikleyecek bir observer'ekleyelim.
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "remoteNotificationReceiveAction:", name: "remoteNotificationReceived", object: nil)
}


func remoteNotificationReceiveAction(data:NSNotification) {
        // local notification'la post ettiğimiz içeriğimiz string olduğu için burada da string olarak karşılıyoruz.
        if let customData:String = data.object as? String {
            // böylece customData'mızı viewController'içinde yer alan bir metoda transfer ettik, artık bundan sonra yeni bir view veya viewController present etmek istiyorsanız buradan devam edebilirsiniz.
        }
    }
19, Haziran, 2015 yasin tarafından yorumlandı
hayır öyle değil. değişkeni appDelegate içerisinde tanımla.
viewController'da daha tanımlamadığın değişkene appDelegate içerisinden nasıl ulaşacaksın?

öncelikle appDelegate içerisinde bir değişken tanımla

var myPayload:[NSObject: AnyObject]?

daha sonra didFinishLaunchingWithOptions metodunun içerisinde ilk yapılan işlem launcOptions'u almak ve bu değişkene set etmek olsun.


if launchOptions != nil {
            if let apnsPayload:[NSObject: AnyObject] = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [NSObject: AnyObject] {
                self.myPayload = apnsPayload
            }
        }


viewController içerisinde viewDidload metodunda appDelegate bulunan bu değişkeni al.

if let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate {
            if let payLoad:[NSObject: AnyObject] = appDelegate.myPayload {
                // payload'artık burada
            }
        }


bu sayede viewController oluşturul oluşturulmaz appDelegate içerisindeki myPayload değişkeni eğer bir değer tutuyorsa aksiyonunu gerçekleştirebilirsin.
19, Haziran, 2015 burhanaksendir tarafından yorumlandı
20, Haziran, 2015 burhanaksendir tarafından düzenlendi
Gerçekten çok teşekkür ederim. Son olarak bu addObserver'ı remove etmemiz gerekecek mi ?
23, Haziran, 2015 burhanaksendir tarafından yorumlandı
Notification için eklediğimiz bu addObserver'ı remove etmemiz gerekecek mi ? Gerekiyorsa ne zaman ve nerde ? bilgilendirirseniz çok sevinirim.
23, Haziran, 2015 yasin tarafından yorumlandı
eğer addObserver'i eklediğin viewController dismiss edilecekse viewwilldisappear metodunda remove edebilirsin.
23, Haziran, 2015 burhanaksendir tarafından yorumlandı
Teşekkür ederim.
...