2016-01-06 1 views
-1

Пользователь может уже чирикать (текст, который был продиктован на часах) на переднем плане, если конкретный vc активен на iPhone.Вызов func session didReceiveMessage в AppDelegate

Сейчас я хочу сделать шаг вперед и отправить этот твит в фон. Таким образом, пользователь диктует текст в приложении часов и текст чирикает, даже если приложение на iPhone закрыто.

Я использовал этот код для определения:

let accountStore = ACAccountStore() 
let accountType = ACAccountStore().accountTypeWithAccountTypeIdentifier(ACAccountTypeIdentifierTwitter) 
var twitterAccount: ACAccount? 
var session: WCSession! 

И что для метода:

func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) { 
    let message2Tweet = message["text2Tweet"]! as? String 

    dispatch_async(dispatch_get_main_queue(), { 

     NSUserDefaults.standardUserDefaults().setBool(true, forKey: "CalledAppDelegate") 
     print("Nachricht in AppDelegate: \(message2Tweet)") 


     if(WCSession.isSupported()){ 
      self.session = WCSession.defaultSession() 
      self.session.delegate = self 
      self.session.activateSession() 
     } 

     self.accountStore.requestAccessToAccountsWithType(self.accountType, options: nil) { (success, error) -> Void in 
      if !success { 

       print("Kein Zugriff") 

      } else { 

       let allAccounts = self.accountStore.accountsWithAccountType(self.accountType) 

       if allAccounts.count > 0 { 
        self.twitterAccount = allAccounts.last as? ACAccount 
       } 
      } 

      let url = NSURL(string: "https://api.twitter.com/1.1/statuses/update.json") 

      let txt = message2Tweet 

      if txt != "" { 
       let request = SLRequest(forServiceType: SLServiceTypeTwitter, requestMethod: .POST, URL: url, parameters: ["status": txt!]) 
       request.account = self.twitterAccount 

       request.performRequestWithHandler { (data, response, error) -> Void in 

        if response.statusCode != 200 { 

         print(error) 
        } else { 

         print("No error") 
        } 


       } 

      } 



     } 

    }) 

} 

Но это не работает в для- и фона.

Как это исправить?

ответ

1

Если iPhone приложение закрыто, и вы реализовали

func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) { 
} 

в конкретном VC вы не получите сообщение, пока ваш VC не живут, но если вы реализовали вышеупомянутый метод в AppDelegate, вы получит его, даже когда ваше приложение будет закрыто.

Как уже упоминалось в link

Вызов этого метода из вашего расширения WatchKit пока он активен и работает пробуждается соответствующее приложение IOS в фоновом режиме и делает его доступным. При вызове этого метода из приложения IOS не просыпаются соответствующее расширение WatchKit

Ваше приложение сделал просыпаются в фоновом режиме, но так как ваш VC не живут, поэтому вы не получаете сообщение.

+0

Спасибо за ваш ответ! Я уже использовал это в AppDelegate. Но это бот, работающий еще раз. Вот почему я думал, что неправильно использовать это в AppDelegate. Чтобы убедиться, что нет другой причины, я устанавливаю для bool NSUserDefault значение true, если AppDelegate получает сообщение и проверяет, что в моем приложении с печатью на консоли. И это все еще ложно, поэтому сообщения не было. – Devhess

+0

Это странно! Я пробовал это и его работу. Можете ли вы продемонстрировать реализацию didReceiveMessage? – Muneeba

+0

'func session (session: WCSession, didReceiveMessage message: [String: AnyObject]) { let message2Tweet = message [" text2Tweet "]! в виде? Строка dispatch_async (dispatch_get_main_queue(), { \\ Весь код слишком долго ... NSUserDefaults.standardUserDefaults() SetBool (правда, forKey:. "CalledAppDelegate") печати ("Nachricht в AppDelegate: \ (message2Tweet) «) } ' – Devhess

Смежные вопросы