UIActivityViewController仅分享文本

7

我想使用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. 如果我将网页链接添加到其中,在设备上它也能够工作,如果我删除该网页链接,则无法工作。

//工作的代码:

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个回答

6

看起来这不是一个错误,而是Facebook政策的更新:

“在与我们的团队讨论关于清除预填充消息区域文本的问题后,我们发现这实际上是新共享扩展程序的设计。 预填充文本违反了平台政策2.3 ..... 因此,在所有情况下,执行政策2.3是一项功能而不是错误。” https://developers.facebook.com/bugs/949486035103197/


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/

他们表示这个问题将在下一次更新中修复。


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)
}

每个选项选择后,共享功能都可以正常使用! 这是 TW 这是 FB 这来自应用程序

在我的端上一切正常。请再次检查您的代码!


同时,completionHandler已经被弃用了!你必须使用completionWithItemsHandler代替! - Bonnke
你使用iOS 8.3吗?因为在这个版本中它无法工作。 - user3728728
@user3728728 是的,它是Xcode 6.3.1和iOS 8.3。但请注意,我正在测试设备,而不是模拟器! - Bonnke
所以,我重新检查了completionWithItemsHandler的代码更改,甚至从我手头拥有的6.3版本下载了6.3.1,但仍然无法工作。如果您使用的是8.3版本,那么这就是一个奇怪的谜题。 - user3728728
@user3728728 我不知道了...但是对我来说肯定是有效的。 如果有人能帮我解决这个问题,我会非常感激:https://dev59.com/wF0a5IYBdhLWcg3wqaRS - Bonnke

3
我一直遇到同样的问题,但没能解决。目前为止,我发现以下情况:
  • 移除设备中的Facebook.app可以解决此bug(但这并不是解决方案)
  • 在Facebook.app >v28.0 & iOS8.3的设备上,此bug似乎仍然持续存在
  • Facebook.app v28.0 & iOS8.3仍然有效
  • Facebook.app v29.0 & iOS8.2仍然有效
  • 此bug也影响分享URL的功能
难以确定Facebook是否实际与此bug有关,因为他们会发布虚假的更新日志。
由于我的应用程序中分享功能不是主要功能,所以我将等待iOS8.4和/或Facebook.app v30.0的发布。

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一起使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接