2016-01-06 42 views
-1

如果iPhone上的某個特定vc處於活動狀態,用戶就可以在前臺發送tweet(在手錶上指定的文本)。在AppDelegate中調用func會話didReceiveMessage

但是現在我想要進一步發送背景中的鳴叫。因此,用戶在手錶應用中指定文本,即使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應用程序被關閉,並已在一個特定的VC實現

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

你不會得到消息,直到你的VC是活的,但如果你已經在AppDelegate實現上面的方法,你即使您的應用已關閉,也會收到。

正如link

提到從WatchKit擴展調用此方法雖然是積極的 和運行喚醒相應的iOS應用在後臺 使它到達。從您的iOS應用程序調用此方法不會 喚醒相應WatchKit擴展

您的應用程序做背景,但因爲你的VC不活,這就是爲什麼你沒有得到消息醒來。

+0

謝謝你的回答!我已經在AppDelegate中使用了它。但它的機器人工作多一次。這就是爲什麼我認爲在AppDelegate中簡單使用它是不對的。爲了確保沒有其他原因,我設置了一個布爾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) 「),它在你的問題PLZ – Devhess