ios swift twitter uiactivityviewcontroller

ios - El controlador de finalización UIActivityViewController devuelve éxito cuando tweet falló



swift twitter (4)

Utilice el controlador de finalización como este Para SWIFT 3 y 4, iOS 10 y 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)

Estoy usando un UIActivityViewController para mostrar una hoja de compartir para que los usuarios puedan compartir mi aplicación. Actualmente estoy probando tweets y obtengo algunos resultados inesperados. Al twittear por primera vez, todo va bien. En la segunda ocasión, aparece un mensaje de error de tweet duplicado, que se espera. El problema es que completionWithItemsHandler está volviendo exitoso: ¡Bool es verdadero!

Quiero poder mostrar mi propio mensaje personalizado al usuario en lugar del masivo que se devuelve actualmente.

Aquí está mi código:

@IBAction func ShareButtonTapped(sender: AnyObject) { let textToShare = "I''m using Buzz! The new way to send emoji''s, with sound, it''s 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 }) } }

Aquí está mi registro:

2015-01-27 11: 10: 58.021 Buzz [3239: 813859] LaunchServices: invalidationHandler called
2015-01-27 11: 10: 58.052 Buzz [3239: 813860] LaunchServices: invalidationHandler llamado Activity: com.apple.UIKit.activity.PostToTwitter Success: true Items: nil Error: nil
2015-01-27 11: 11: 04.134 Buzz [3239: 813859] LaunchServices: invalidationHandler called
2015-01-27 11: 11: 09.182 Buzz [3239: 813859] plugin com.apple.share.Twitter.post invalidado


No creo que pueda afectar el flujo de retroalimentación de UIActivityViewController, ya que es un componente de alto nivel y fácil de usar que no está diseñado para una personalización precisa.

Lo que puede hacer, sin embargo, es guardar el estado en el que el usuario ha twitteado este mensaje exacto después del primer tweet y luego desactivar Twitter desde UIActivityController utilizando excludedActivityTypes y UIActivityTypePostToTwitter . Entonces, en lugar de mostrar un error para un tweet duplicado, previene que la secuencia de acción ocurra.


Sugiero reemplazar

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

con

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

Esto funcionó para mí. ¡Espero eso ayude!


SWIFT 2.0 iOS 8.0> , debe usar el controlador de finalización como este:

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 }