在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不活,这就是为什么你没有得到消息醒来。
谢谢你的回答!我已经在AppDelegate中使用了它。但它的机器人工作多一次。这就是为什么我认为在AppDelegate中简单使用它是不对的。为了确保没有其他原因,我设置了一个布尔NSUserDefault为true,如果AppDelegate收到一条消息并在控制台中检查了我的应用程序中的打印。它仍然是错误的,所以没有消息。 – Devhess
这很奇怪!我已经试过这个和它的工作。你可以展示didReceiveMessage的实现吗? – Muneeba
'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