Подтвердить что ты не робот

Обработчик завершения UIActivityViewController возвращает успех, когда твит не сработал

Я использую UIActivityViewController для отображения общей папки, чтобы пользователи могли делиться моим приложением. В настоящее время я тестирую твиты, и я получаю неожиданные результаты. В твиттере в первый раз все идет хорошо. Во второй раз, я получаю дублирующее сообщение об ошибке твита, которое ожидается. Проблема в том, что завершениеWithItemsHandler возвращает успех: Bool как true!

Я хочу иметь возможность отображать мое собственное персонализированное сообщение пользователю, а не массивное, которое возвращается в настоящее время.

Вот мой код:

@IBAction func ShareButtonTapped(sender: AnyObject) {
    let textToShare = "I'm using Buzz!  The new way to send emoji's, with sound, it annoying, funny and amazing"
    var url = NSURL(string: "-Image url masked out-")
    var data = NSData(contentsOfURL: url!)
    let image = UIImage(data: data!)
    if let myWebsite = NSURL(string: "-redirect masked out-")
    {
        let objectsToShare = [textToShare, myWebsite]
        let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
        activityVC.completionWithItemsHandler = {
            (activity, success, items, error) in
            println("Activity: \(activity) Success: \(success) Items: \(items) Error: \(error)")
        }
        self.presentViewController(activityVC, animated: true, completion: { () -> Void in

        })
    }
}

Вот мой журнал:

2015-01-27 11:10: 58.021 Buzz [3239: 813859] LaunchServices: invalidationHandler называется
2015-01-27 11:10: 58.052 Buzz [3239: 813860] LaunchServices: invalidationHandler называется Activity: com.apple.UIKit.activity.PostToTwitter Успех: true Элементы: nil Ошибка: nil
2015-01-27 11:11: 04.134 Buzz [3239: 813859] LaunchServices: invalidationHandler называется
2015-01-27 11:11: 09.182 Buzz [3239: 813859] плагин com.apple.share.Twitter.post недействителен

4b9b3361

Ответ 1

Использовать обработчик завершения так: SWIFT 3 И 4, iOS 10 И 11:

activityVC.completionWithItemsHandler = {(activityType: UIActivityType?, completed: Bool, returnedItems: [Any]?, error: Error?) in
    if !completed {
        // User canceled 
        return
    }
    // User completed activity
}

self.present(activityVC, animated: true, completion: nil)

Ответ 2

SWIFT 2.0 iOS 8.0 > , вы должны использовать обработчик завершения следующим образом:

self.presentViewController(activityVC, animated: true, completion: nil)

activityVC.completionWithItemsHandler = {(activityType, completed:Bool, returnedItems:[AnyObject]?, error: NSError?) in

     // Return if cancelled
     if (!completed) {
         return
     }

     //activity complete
     //some code here


}

Ответ 3

Я не думаю, что вы можете повлиять на поток обратной связи UIActivityViewController, поскольку это высокоуровневый, простой в использовании компонент, который не предназначен для тонкой настройки.

Однако вы можете сохранить состояние, в котором пользователь вычитал это точное сообщение после первого твита, а затем отключить Twitter из UIActivityController с помощью excludedActivityTypes и UIActivityTypePostToTwitter. Таким образом, вместо того, чтобы показывать ошибку для дублированного твита, вы предотвращаете даже последовательность действий.

Ответ 4

Я предлагаю заменить

self.presentViewController(activityVC, animated: true, completion: { () -> Void in })

с

self.presentViewController(activityVC, animated: true, completion: nil)

Это сработало для меня. Надеюсь, это поможет!