7

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

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,改变了一些东西。

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

为了让事情更奇怪,我发现了另外 2 件奇怪的事情。

  1. 发布文本的代码在模拟器上工作(只要你在设置facebook中添加)
  2. 如果我添加到 web url 它也可以(在设备中)如果我删除 web url 它不起作用。

//有效的代码:

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 ]
4

5 回答 5

6

看来这不是错误,而是 Facebook 政策更新:

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

于 2015-07-08T09:35:47.173 回答
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/

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

于 2015-05-13T13:19:44.260 回答
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)
}

并且对于所选的每个选项,共享都可以正常工作! 这里是台湾 这里是FB 这是来自应用程序

它在我这边运行良好。请再次检查您的代码!

于 2015-05-06T09:25:07.323 回答
3

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

  • 从设备中删除 Facebook.app 时可以修复错误(但这不是解决方案)
  • 错误似乎在 Facebook.app >v28.0 & iOS8.3 的设备上持续存在
  • Facebook.app v28.0 & iOS8.3 仍然有效
  • Facebook.app v29.0 & iOS8.2 仍然有效
  • 共享 URL 似乎也受到此错误的影响

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

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

于 2015-05-07T14:16:28.550 回答
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,您可以先传递一个图像,然后传递一个逗号,然后传递一个字符串变量,或者在上面的启用中打开“并直接输入您的文本”,这适用于 Facebook 和 Twitter UIActivityViewController

于 2015-09-29T19:59:53.257 回答