无法使用 SLComposeViewController 在 Twitter 上共享图像和文本
Cannot share both image and text on Twitter using SLComposeViewController
我只是这样做:
if let vc = SLComposeViewController(forServiceType: SLServiceTypeTwitter) {
vc.setInitialText("Tweet text")
vc.add(image)
present(vc, animated: true)
}
我已经在我的应用程序中执行此操作很长时间了,它以前工作正常,但我最近才意识到它不再工作了。现在,只显示图像,文本部分是空的。
那么...发生了什么,该怎么办?
尝试使用 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。
自从 Twitter dropped support for TwitterKit
以来,此问题的已接受答案不再有效
On October 31, 2018, we will no longer actively contribute to, or accept issues and pull requests on, the open sourced SDKs (iOS, Android, Unity) on GitHub. After this date we will also stop releasing the SDKs through Cocoapods, Carthage, and Bintray JCenter. Documentation and source code for all three SDKs on GitHub will remain available for consumption in an archived state.
此外,使用 Twitter 套件需要您拥有 Twitter 应用程序,并且用户授予您的 Twitter 应用程序访问其帐户信息的权限。
我能够使用 Branch.io deep-links 解决这个问题。
TLDR
- 将分支 SDK 添加到您的项目。
- 创建一个分支 url,将 url 添加到您要共享的图像和任何其他附加信息。
- 将 "twitter" 添加到您的应用程序
info.plist LSApplicationQueriesSchemes
- 使用引用 in this answer 的默认深度 link 将 link 分享到 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 应用程序,如下所示:
我只是这样做:
if let vc = SLComposeViewController(forServiceType: SLServiceTypeTwitter) {
vc.setInitialText("Tweet text")
vc.add(image)
present(vc, animated: true)
}
我已经在我的应用程序中执行此操作很长时间了,它以前工作正常,但我最近才意识到它不再工作了。现在,只显示图像,文本部分是空的。 那么...发生了什么,该怎么办?
尝试使用 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。
自从 Twitter dropped support for TwitterKit
以来,此问题的已接受答案不再有效On October 31, 2018, we will no longer actively contribute to, or accept issues and pull requests on, the open sourced SDKs (iOS, Android, Unity) on GitHub. After this date we will also stop releasing the SDKs through Cocoapods, Carthage, and Bintray JCenter. Documentation and source code for all three SDKs on GitHub will remain available for consumption in an archived state.
此外,使用 Twitter 套件需要您拥有 Twitter 应用程序,并且用户授予您的 Twitter 应用程序访问其帐户信息的权限。
我能够使用 Branch.io deep-links 解决这个问题。
TLDR
- 将分支 SDK 添加到您的项目。
- 创建一个分支 url,将 url 添加到您要共享的图像和任何其他附加信息。
- 将 "twitter" 添加到您的应用程序
info.plist LSApplicationQueriesSchemes
- 使用引用 in this answer 的默认深度 link 将 link 分享到 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 应用程序,如下所示: