0

iPhone で特定の VC がアクティブになっている場合、ユーザーはすでにフォアグラウンドでツイート (watch で口述されたテキスト) を実行できます。

しかし、ここで一歩前進して、このツイートを Backgroundで送信したいと思います。そのため、ユーザーが時計アプリでテキストを口述すると、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")
                    }


                }

            }



        }

    })

}

しかし、それはfor-およびbackgroundでは機能していません。

それを修正する方法は?

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 に答える