2016-01-21 22 views
1

我有一個推送通知,當應用程序接收它,我撥打以下訪問推動有效載荷,如果應用程序是無效的

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 

    if userInfo["t"] as! String == "rqst" { 

     print("type is help request") 

     if let token = NSUserDefaults.standardUserDefaults().objectForKey("authToken") { 
      authTokenOfHelper = token as! String 
     } 

     let storyBoard = UIStoryboard.init(name: "Main", bundle: nil) 
     let viewController = storyBoard.instantiateViewControllerWithIdentifier("helperMap") 
     let navController = UINavigationController.init(rootViewController: viewController) 
     self.window?.rootViewController = nil 
     self.window?.rootViewController = navController 
     self.window?.makeKeyAndVisible() 

     helpRequestReceived = true 

    } 

} 

這個初始化storyboard.But如果我的應用程序是由系統打死,它是關閉的,設備接收推動,在輕推後沒有發生任何事情。

看來,我必須使用application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?)如果應用程序被關閉

但如何在didFinishLaunchingWithOptions訪問用戶信息?

回答

1

您可以使用UIApplicationLaunchOptionsRemoteNotificationKey作爲啓動選項didFinishLaunching檢查。

UIApplicationLaunchOptionsRemoteNotificationKey:表示 遠程通知可供應用程序處理。 這個鍵的值是一個包含遠程 通知有效載荷的NSDictionary。 > - 警報:可以是警報消息的字符串,也可以是帶有兩個鍵的字典:body和show-view。 > - 徽章:數字 指示要從提供者下載的數據項的數量。 此號碼將顯示在應用程序圖標上。沒有徽章 屬性表示當前標有圖標的任何數字應該被刪除。 > - 聲音:應用程序包中聲音文件的名稱以 作爲警報聲播放。如果指定了「默認」,則應播放默認聲音 。

您可以手動撥打 application:didFinishLaunchingWithOptions:

目標C

- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // ... 

    if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) { 
     [self application:application didReceiveRemoteNotification:launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]]; 
    } 

    return YES; 
} 

斯威夫特

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     // Override point for customization after application launch. 

     if let remoteNotification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary { 

      self.application(application, didReceiveRemoteNotification: launchOptions![UIApplicationLaunchOptionsRemoteNotificationKey]! as! [NSObject : AnyObject]) 

     } 


     return true 
    } 
+0

試圖代碼,但如果我打開推什麼也沒有發生。該應用程序無法打開 –

+0

應用程序未打開或didReceiveRemoteNotification未被調用? – technerd

+0

哦不,對不起,應用程序打開,但然後立即崩潰 –

1

這是在目標C中,但同樣的事情在Swift中。把這個didFinishLaunchingWithOptions

NSDictionary *remoteNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
if (remoteNotif) { 
    [self application:application didReceiveRemoteNotification:remoteNotif]; 
} 

斯威夫特:

if let remoteNotif = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary {...}