在AppDelegate中调用func会话didReceiveMessage

问题描述:

如果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") 
        } 


       } 

      } 



     } 

    }) 

} 

但它不是在换和背景的工作。

如何解决这个问题?

如果您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