Настройка параметров для urlRequest с помощью TwitterKit для прямого сообщения в Swift - PullRequest
0 голосов
/ 14 сентября 2018

С помощью Swift я могу без проблем опубликовать твит, используя следующий код:

func postTweet(tweet : String) {
    if (TWTRTwitter.sharedInstance().sessionStore.hasLoggedInUsers()) {
        var clientError : NSError?
        let session = TWTRTwitter.sharedInstance().sessionStore.session()

        if let userid = session?.userID {

            let client = TWTRAPIClient(userID: userid)
            let urlEndpoint = "https://api.twitter.com/1.1/statuses/update.json"
            let params = ["status": "This works fine."]

            let request = client.urlRequest(withMethod: "POST",
                 urlString: urlEndpoint, 
                 parameters: params, error: &clientError)

            client.sendTwitterRequest(request) { (response, data, connectionError) -> Void in
                if connectionError != nil {
                    print("Error: \(String(describing: connectionError?.localizedDescription))")
                }

                do {
                    let json = try JSONSerialization.jsonObject(with: data!, options: [])
                    print("json: \(json)")

                } catch let jsonError as NSError {
                    print("json error: \(jsonError.localizedDescription)")
                }
            }
        }
    }
}

-

Однако, когда я изменяю urlEndpoint и параметры для отправкиПрямое сообщение, я получаю сбой в приложении.Сообщение об ошибке ниже, и я не могу понять, почему.Любая помощь приветствуется.

func postDM(tweet : String) {
    if (TWTRTwitter.sharedInstance().sessionStore.hasLoggedInUsers()) {
        var clientError : NSError?
        let session = TWTRTwitter.sharedInstance().sessionStore.session()
        let statusesShowEndpoint = "https://api.twitter.com/1.1/direct_messages/events/new.json"

        // '{"event": {"type": "message_create", "message_create": {"target": {"recipient_id": "RECIPIENT_USER_ID"}, "message_data": {"text": "Hello World!"}}}}'

        let param = [
            "event": [
                "type":"message_create",
                "message_create": [
                    "target": ["recipient_id": "6WCbot"],
                    "message_data": ["text": "\(tweet)"]
                ]
            ]
        ]

        if let userid = session?.userID {

            let client = TWTRAPIClient(userID: userid)
            //let statusesShowEndpoint = "https://api.twitter.com/1.1/statuses/update.json"
            //let param = ["status": "Terceiro teste?"]
            //print (param)

            // CRASH HERE
            var request = client.urlRequest(withMethod: "POST", urlString: statusesShowEndpoint, parameters: param, error: &clientError) 

            request.setValue("application/json", forHTTPHeaderField: "Content-Type")
            request.httpBody = try? JSONSerialization.data(withJSONObject: param, options: [])

            client.sendTwitterRequest(request) { (response, data, connectionError) -> Void in
                if connectionError != nil {
                    print("Error: \(String(describing: connectionError?.localizedDescription))")
                }

                do {
                    if data != nil {
                        let json = try JSONSerialization.jsonObject(with: data!, options: [])
                        print("json: \(json)")
                    }

                } catch let jsonError as NSError {
                    print("json error: \(jsonError.localizedDescription)")
                }
            }
        }
    }
}

Появляется сообщение об ошибке «Неопознанный селектор»:


2018-09-14 14: 08: 55.697266 + 0200 CompanionApp [35050: 15292775] -[_TtGCs26_SwiftDeferredNSDictionarySSP__ stringByAddingPercentEncodingWithAllowedCharacters]: непризнанный селектор направлен например 0x60800023d200 2018-09-14 14: 08: 55,706728 + 0200 6WCCompanion [35050]: 15292775 *** Нагрузочного приложение из-за неперехваченное исключение 'NSInvalidArgumentException', причина: «- [_ TtGCs26_SwiftDeferredNSDictionarySSP__ stringByAddingPercentEncodingWithAllowedCharacters:]: нераспознанный селектор отправлен на экземпляр 0x60800023d200 '

1 Ответ

0 голосов
/ 14 сентября 2018

Пожалуйста, используйте этот формат

{"event": {"type": "message_create", "message_create": {"target": {"receient_id": "844385345234"}, "message_data":{"text": "Привет, меня зовут Джон. Чем я могу помочь?",}, "custom_profile_id": "100001"}}}

...