UIActivityViewController仅共享文本

时间:2015-05-01 10:10:32

标签: facebook swift sharing uiactivityviewcontroller ios8.4

我想使用UIActivityViewController分享简单的文字 我使用swift,使用xcode 6.3 代码非常简单,非常适合照片,但不仅仅是文本, 我不想在objectsToShare中包含任何网址,只需要干净的文字 这是代码:

var objectsToShare: ["some text to share"]! 
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)

//handler for completed task
activityVC.completionHandler = {(activityType, completed:Bool) in
            if !completed {
                println("cancelled")
                return
            }
reportCompleted() //report to server it's done.
 }

//Excluded Activities Code
activityVC.excludedActivityTypes = [UIActivityTypeAirDrop, UIActivityTypeAddToReadingList, UIActivityTypeCopyToPasteboard ]

//activate the share view
self.presentViewController(activityVC, animated: true,  completion: {
            (complete)  in
            println(complete)

        })

现在我知道这一切都取决于用户有Facebook - 不仅在他的手机上,而且在他的设置上。 (我直接从我的手机6尝试了这个,它有Facebook设置,而不是来自模拟器) 这个代码曾经工作正常,仍然适用于图像,而不是文本,但由于某种原因,它停止工作文本共享,也许文本本身有关,也许我的代码不好,或者Facebook,改变一些事情。

感谢您对此主题的任何想法。

为了让事情更奇怪,我发现了两件更奇怪的事情。

  1. 发布文本的代码正在模拟器上工作(只要你在设置facebook中添加)
  2. 如果我添加到网址,它也可以(在设备中)删除网址,但是它无效。
  3. //有效的代码:

    var myWebsite = NSURL(string: "http://www.someurl.com/")
    
        let textToShare = "Swift is awesome!  Check out this website about it!"
    
         objectsToShare = [textToShare , myWebsite!]
    //continue regular.
    

    //不起作用的代码:

        let textToShare = "Swift is awesome!  Check out this website about it!"
    
         objectsToShare = [textToShare ]
    

5 个答案:

答案 0 :(得分:6)

似乎这不是一个bug,而是facebook政策更新:

“在与我们的团队讨论剥离文本的预填充消息区域后,这实际上是BY DESIGN的新分享扩展。 预填文本违反平台政策2.3 .....所以在所有执行政策2.3中都是一个功能,而不是一个错误。 “ https://developers.facebook.com/bugs/949486035103197/

答案 1 :(得分:4)

我看了,问题不是iOS 8.3,是FacebookApp v29,他们还没有在今天的更新中修复它。如果你卸载了你的FacebookApp,它就可以运行。

我无法发布图片,但是如果您在安装了Facebook应用程序的情况下尝试此代码,并且没有它,您将看到差异

func didPressShare(sender: AnyObject) {
    if SLComposeViewController.isAvailableForServiceType(SLServiceTypeFacebook){
        var facebookSheet:SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeFacebook)
        facebookSheet.setInitialText("This is without facebook on device")
        self.presentViewController(facebookSheet, animated: true, completion: nil)
    } else {
        var alert = UIAlertController(title: "Accounts", message: "Please login to a Facebook account to share.", preferredStyle: UIAlertControllerStyle.Alert)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
        self.presentViewController(alert, animated: true, completion: nil)
    }

}

正如他们所说:“对于所有人的延迟感到抱歉,但我们已经安排了针对v31的此修复程序。延迟的原因是获得App Store批准更新的周期需要时间。我们感谢您的耐心等待。”

https://developers.facebook.com/bugs/949486035103197/

他们说将在下次更新时修复。

答案 2 :(得分:3)

我刚刚使用此代码测试了我的示例:

@IBAction func shareMoment_Action(sender: AnyObject) {
let firstActivityItem = "This is a simple text"
var activityVC = UIActivityViewController(activityItems: [firstActivityItem], applicationActivities: nil)

    activityVC.excludedActivityTypes = [
        UIActivityTypePostToWeibo,
        UIActivityTypePrint,
        UIActivityTypeCopyToPasteboard,
        UIActivityTypeAssignToContact,
        UIActivityTypeSaveToCameraRoll,
        UIActivityTypeAddToReadingList,
        UIActivityTypePostToFlickr,
        UIActivityTypePostToVimeo,
        UIActivityTypePostToTencentWeibo,
        UIActivityTypeAirDrop
    ]

    activityVC.completionWithItemsHandler = {(activityType: String!, completed: Bool, arrayOptions: [AnyObject]!, error: NSError!) in
        println(activityType)
    }

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

分享对所选的每个选项都运行良好! Here is TW Here is the FB Here is from App

这对我很有帮助。请再次检查您的代码!

答案 3 :(得分:3)

我一直面临同样的问题,但一直无法修复。这是我到目前为止所发现的:

  • 从设备中删除Facebook.app时可以修复错误(但它不是解决方案)
  • Bug似乎持续存在于Facebook.app> v28.0& iOS8.3
  • Facebook.app v28.0& iOS8.3仍然可以使用
  • Facebook.app v29.0& iOS8.2仍可正常使用
  • 分享网址似乎也受到此错误的影响

很难判断Facebook是否真的与这个错误有关,因为他们有进入虚假发布说明更新的政策。

由于共享功能不是我的应用程序的主要功能,我将等到iOS8.4和/或Facebook.app v30.0的发布

答案 4 :(得分:0)

在做了一些研究后,我找到了以下问题的解决方案:

func shareTapped() {
    let vc = UIActivityViewController(activityItems: [detailImageView.image!, "Check out these photos! http://www.photolib.noaa.gov/nssl"], applicationActivities: [])
    presentViewController(vc, animated: true, completion: nil)

所以在ActivityItems中,您可以传递图像,然后传递逗号,然后传递一个字符串变量或打开"并直接输入您的文字"在上面的启用中,这适用于UIActivityViewController中的Facebook和Twitter。