0

如果特定的 vc 在 iPhone 上处于活动状态,用户已经可以在前台发推文(在手表上口述的文本)。

但现在我想更进一步,在后台发送这条推文。因此,用户在手表应用程序中口述文本,即使 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")
                    }


                }

            }



        }

    })

}

但它在后台和后台都不起作用。

如何解决?

4

1 回答 1

2

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

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

在特定的 VC 中,在您的 VC 上线之前您不会收到消息,但是如果您在 中实现了上述方法AppDelegate,即使您的应用程序关闭,您也会收到它。

链接中所述

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

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

于 2016-01-06T12:25:08.293 回答