Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.
0 oy
2.1k kez görüntülendi
ios development kategorisinde tarafından
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
tarafından
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.
        }
    }
tarafından
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.
tarafından
tarafından düzenlendi
Gerçekten çok teşekkür ederim. Son olarak bu addObserver'ı remove etmemiz gerekecek mi ?
tarafından
Notification için eklediğimiz bu addObserver'ı remove etmemiz gerekecek mi ? Gerekiyorsa ne zaman ve nerde ? bilgilendirirseniz çok sevinirim.
tarafından
+1
eğer addObserver'i eklediğin viewController dismiss edilecekse viewwilldisappear metodunda remove edebilirsin.
tarafından
Teşekkür ederim.
...