在AppDelegate中调用func session didReceiveMessage

时间:2016-01-06 11:33:18

标签: ios swift watch-os-2 watchconnectivity wcsession

如果iPhone上的特定vc处于活动状态,用户可以在前台发推文(在手表上指示的文字)。

但现在我想向前迈出一步,在背景中发送此推文。因此,即使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 个答案:

答案 0 :(得分:2)

如果您的iPhone应用已关闭且您已实施

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

在特定的VC中,如果您的VC处于活动状态,您将无法收到该消息,但如果您已在AppDelegate中实施上述方法,即使您的应用已关闭,您也会收到该消息。

正如link

中所述
  

在WatchKit扩展名处于活动状态时调用此方法   并运行在后台唤醒相应的iOS应用程序   使它可以访问。从您的iOS应用程序调用此方法不会   唤醒相应的WatchKit扩展

您的应用程序确实在后台醒来,但由于您的VC不在线,这就是您没有收到消息的原因。