是否可能生成一个“分享到Facebook”的链接,而不是打开网页分享对话框,在Android/iOS/移动设备上直接打开原生的Facebook应用程序?

62
在网站上是否可能有一个“分享到Facebook链接”,并在本机应用中打开共享对话框?
目前的行为: 点击Facebook分享链接会打开基于Web的共享对话框,这很糟糕,因为大多数移动Facebook用户都使用原生应用程序,因此没有在浏览器中登录。因此,Web共享对话框会提示他们输入用户凭据,这可能会导致他们最终不分享。
理想的行为: 点击“分享到Facebook”链接将在本机Facebook应用程序中引导用户进入共享对话框,用户已经登录。
提前感谢您的帮助!

3
你是在说当你在移动设备上点击网页中的分享按钮时吗?我想这通常是通过Facebook JavaScript SDK完成的,该SDK不使用应用程序。如果你正在使用已安装的应用程序,则可以使用Android或iOS SDK与FB应用程序共享。我怀疑网页可能无法像这样与应用程序交互。 - Novaterata
这似乎是PhoneGap的动力所在。混合式Web应用程序可以更或少地克隆网站,但可以访问本机应用程序。 - Novaterata
@Walker,你找到任何可行的解决方案了吗? - Satyen Udeshi
嗨,虽然它的答案是2014年的,但在2017年是否有任何方法可以打开本地应用程序来分享某些内容? - Vishal Thoriya
我也遇到了同样的问题,但是找不到任何相关的信息 :( - Rajat Chandak
5个回答

34

目前为止,没有官方的方法可以实现这个功能。不过,Facebook 可以通过转发其 Web 分享对话框并使用自定义 URL 方案来实现。因此,如果您使用正式文档记录的方式打开此对话框,一旦可用,您将无需进行任何其他更改即可获得此功能。

使用官方 Web 分享对话框的最简单方法是,不需要任何先决条件,只需链接到此 URL:

https://www.facebook.com/dialog/share?
    app_id=145634995501895
    &display=popup
    &href=URL_TO_SHARE
    &redirect_uri=RETURN_URL

你需要用正确的URL编码值替换URL_TO_SHARE和RETURN_URL。或者包含Facebook JS-SDK并使用经典共享按钮或其他在网页分享中描述的方式。

仅为完整起见:在iOS和Android上的原生应用程序中,如果用户安装了Facebook应用程序,则可以直接链接到Facebook应用程序。请参见iOSandroid中的分享。由于这并不总是发生,因此您必须使用各自平台的特定Facebook SDK进行检查,并回退到基于Web的对话框。

顺便说一下:我强烈反对您使用Facebook应用程序注册的未经官方文档化的URL-schemes。虽然它们可能在从已安装Facebook应用程序的设备访问网站时正常工作,但它们在未安装Facebook应用程序的设备上成为死链接或奇怪的浏览器警告,尤其是任何PC或Mac。即使您检查了所有这些情况,Facebook 已更改其URL-Schemes,并且可能随时再次更改,从而破坏您的链接或导致未定义的行为。


4
你好,虽然这个问题的答案是从2014年的,但在2017年是否有可能通过网页打开本地应用程序来分享内容? - Vishal Thoriya
这真是令人头疼啊... 在 Android 上只需要 5 行代码,为什么在 iOS 上这么难呢? - Endran
@VishalThoriya 确实,这个答案已经三年了。但据我所知,对于OP的问题(通过网站从本机应用程序共享),它仍然是最新的。 - jan.vogt
@Endran 你是指从本地应用程序分享吗?因为OP的问题不是关于这个的。尽管如此,我也包含了相关文档的链接。我仍然不明白你的评论,因为在iOS上从本地应用程序共享并不需要比5行代码多得多?事实上,你自己的答案只需要使用UIActivityViewController就可以完成,只需要4行代码。 - jan.vogt
@Endran 哦,好的,我并没有感到受辱。我只是想知道是否有什么遗漏或者需要更新答案的地方。 :) - jan.vogt
显示剩余3条评论

0
以下代码将检查应用程序是否安装,如果已安装,您可以使用该应用程序共享,您无需再次在网络浏览器中打开Facebook并重新登录。 如果未安装该应用程序,则仅使用Facebook共享链接,然后用户必须在浏览器中登录到Facebook,否则该链接将无法共享。
  onShare() {
    console.log(order);
    const title = 'Title';
    const url = 'https://www.facebook.com/';
    const text = "Share on native app if installed";
    if (navigator.share) {
      navigator
        .share({ title: `${title}`, url: `${url}`,text: `${text}`})
        .then(() => {
          console.log('Thanks for sharing!');
        })
        .catch(console.error);
    } else {
      window.location.replace(
        `https://www.facebook.com/sharer.php?u=${url.trim()}&quote=${text}`
      );
    }
  } //onShare ends here

0

<a href="fb://page/100623981381289">
    This is My page (click on your Phone installed facebook)
</a>


0

https://developer.mozilla.org/en-US/docs/Web/API/Navigator/share

你可以尝试这个方法,让用户决定使用哪个本地应用程序来分享你的链接。
它会打开用户设备上的本地分享功能。
const data = {
  title: document.title,
  text: 'Hello World',
  url: 'https://your_site_url',
}

const shareVia = window.navigator.share(data);

<html>
 <button onClick={shareVia}>Share Me!</button>
</html>

嗨,Mon,当回答问题时,请尽可能包含相关的细节/引用/代码,而不仅仅是链接本身,以防将来该页面不再可用。 - tomRedox

-2

我知道已经过去了几年,但对于可能感兴趣的人:

看一下这个答案:Xcode : sharing content via Action Sheet

让我也在这里复制一下这个答案:

Swift

let shareText = "Hello, world!"
if let image = UIImage(named: "myImage") {
    let vc = UIActivityViewController(activityItems: [shareText, image], applicationActivities: [])
    presentViewController(vc, animated: true, completion: nil)
}

尝试链接教程


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