无法使用SLComposeViewController在Twitter上共享图像和文本

时间:2017-11-10 08:33:09

标签: swift twitter ios11 slcomposeviewcontroller

我只是这样做:

if let vc = SLComposeViewController(forServiceType: SLServiceTypeTwitter) {
    vc.setInitialText("Tweet text")
    vc.add(image)
    present(vc, animated: true)
}

我已经在我的应用程序中完成了这个很长一段时间了,它曾经工作正常,但我刚刚意识到它不再起作用了。现在,只显示图像,文本部分为空。 那么......发生了什么,该怎么办?

2 个答案:

答案 0 :(得分:3)

尝试使用TWTRComposer代替SLComposeViewController TwitterKit 提供具有相同功能的轻量级TWTRComposer,并在您的应用程序没有明确的登录功能时封装授权用户。

let vc = TWTRComposer()
vc.setText("Tweet text")
vc.setImage(UIImage(named: "hi"))
vc.setUrl(URL(string: "https://dev.twitter.com"))
vc.show(from: self, completion: nil)

您可以在此处下载TwitterKit:https://dev.twitter.com/twitterkit/ios/overview

答案 1 :(得分:0)

自从Twitter dropped support到TwitterKit以来,该问题的答案不再有效

  

自2018年10月31日起,我们将不再为GitHub上的开源SDK(iOS,Android,Unity)积极贡献,接受问题或提出请求。在此日期之后,我们还将停止通过Cocoapods,Carthage和Bintray JCenter发行SDK。 GitHub上所有这三个SDK的文档和源代码将保持可用状态,以存档状态提供。

此外,使用Twitter套件要求您拥有Twitter应用程序,并且用户必须向您的Twitter应用程序授予访问其帐户信息的权限。

我能够使用Branch.io深层链接解决此问题。

TLDR

  1. 将分支SDK添加到您的项目中。
  2. 创建一个分支URL,其中包含您要共享的图像的URL和其他任何附加信息。
  3. 将“ twitter”添加到您的应用info.plist LSApplicationQueriesSchemes
  4. 使用引用为in this answer的默认深层链接共享到Twitter的链接。示例:twitter://post?message=\(myBranchUrl)

您可以找到有关将Branch集成到您的iOS项目here

中的更多信息。

您还可以在下面签出一些示例代码:

let buo = BranchUniversalObject.init(canonicalIdentifier: "content/12345")
buo.title = "My Content Title"
buo.contentDescription = "My Content Description"
buo.imageUrl = "https://lorempixel.com/400/400"
buo.publiclyIndex = true
buo.locallyIndex = true
buo.contentMetadata.customMetadata["key1"] = "value1"

let lp: BranchLinkProperties = BranchLinkProperties()
lp.channel = "facebook"
lp.feature = "sharing"
lp.campaign = "content 123 launch"
lp.stage = "new user"
lp.tags = ["one", "two", "three"]

lp.addControlParam("$desktop_url", withValue: "http://example.com/desktop")
lp.addControlParam("$ios_url", withValue: "http://example.com/ios")
lp.addControlParam("$ipad_url", withValue: "http://example.com/ios")
lp.addControlParam("$android_url", withValue: "http://example.com/android")
lp.addControlParam("$match_duration", withValue: "2000")

lp.addControlParam("custom_data", withValue: "yes")
lp.addControlParam("look_at", withValue: "this")
lp.addControlParam("nav_to", withValue: "over here")
lp.addControlParam("random", withValue: UUID.init().uuidString)

buo.getShortUrl(with: lp) { [weak self] (url, error) in
    if let err = error {
        // Handle Error
    }

    if let branchUrl = url, let urlScheme = URL(string: "twitter://post?message=\(branchUrl)") {
        if UIApplication.shared.canOpenURL(urlScheme) {
            UIApplication.shared.open(urlScheme, options: [:], completionHandler: nil)
        } else {
            // Twitter not installed
        }
    } else {
        // Url Error
    }
}

这将打开Twitter应用,如下所示: enter image description here