如果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")
}
}
}
}
})
}
但它不适用于背景和背景。
如何解决这个问题?
答案 0 :(得分:2)
如果您的iPhone
应用已关闭且您已实施
func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) {
}
在特定的VC中,如果您的VC处于活动状态,您将无法收到该消息,但如果您已在AppDelegate
中实施上述方法,即使您的应用已关闭,您也会收到该消息。
正如link
中所述在WatchKit扩展名处于活动状态时调用此方法 并运行在后台唤醒相应的iOS应用程序 使它可以访问。从您的iOS应用程序调用此方法不会 唤醒相应的WatchKit扩展
您的应用程序确实在后台醒来,但由于您的VC不在线,这就是您没有收到消息的原因。