是否有可能在Facebook上产生分享'链接在Android / iOS /移动设备上打开本机Facebook应用程序而不是Web共享对话框?

时间:2014-09-29 18:27:50

标签: android ios facebook mobile

是否可以在打开本机应用中的分享对话框的网站上链接

当前行为:

现在点击Facebook共享链接会打开基于Web的共享对话框,这很糟糕,因为大多数移动Facebook用户都使用本机应用程序,因此未登录到他们的浏览器。因此,Web共享对话框会提示他们输入用户凭据 - 这可能导致他们不能共享。

理想行为:

点击Facebook链接上的分享会导致用户已登录的原生Facebook应用中的分享对话框。

提前感谢您的帮助!

5 个答案:

答案 0 :(得分:29)

到目前为止,还有没有官方方式来实现这一目标。它可以通过Facebook实现 ,使用他们的自定义URL方案转发他们的网络共享对话框。因此,如果您使用officially documented way打开此对话框,您将获得此功能,一旦可用就不会进行进一步更改。

使用官方网络共享对话框没有任何先决条件的最简单方法是链接到此网址:

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 并使用经典分享按钮或sharing on the web中描述的其他方式。

仅为了完整性:在iOS和Android上的原生应用中,如果用户安装了Facebook应用,则可以直接链接到Facebook应用。请参阅iOSandroid的分享。由于情况并非总是这样,您必须使用相应平台的特定Facebook SDK进行检查,并回退到基于Web的对话框。

旁注:我强烈反对您使用Facebook应用程序注册的未正式记录的URL方案。虽然如果从安装了Facebook应用程序的设备访问该网站,它们可能会起作用,但在没有安装Facebook应用程序的设备上,它们会成为死链接或奇怪的浏览器警告,尤其是任何PC或Mac。即使您检查了所有这些案例,Facebook has already changed their URL-Schemes也可能随时再次这样做,破坏您的链接或 - 可能更糟 - 导致未定义的行为。

答案 1 :(得分: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

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

我知道已经过了几年,但对于他们可能会担心: 看看这个答案; Xcode : sharing content via Action Sheet

让我复制一下这个答案:

<强>夫特

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

尝试教程链接

答案 4 :(得分:-1)

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

您可以尝试此方法,让用户决定共享链接时使用哪个本机应用。

它打开用户设备的本机共享

<html>
 <button onClick={shareVia}>Share Me!</button>
</html>
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Period' : [1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6],  
    'Place' : ['CLUB','CLUB','CLUB','HOME','HOME','AWAY','AWAY','WORK','WORK','AWAY','AWAY','GOLF','GOLF','CLUB','CLUB','POOL','POOL','HOME','HOME','WORK','WORK','AWAY','AWAY','POOL','POOL','TENNIS','TENNIS'],                                
    'Total' : [1,1,1,2,2,3,3,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,5],                            
    'Available Group' : ['1','2','1','2','1','2','1','2','1','1','2','1','2','2','1','2','1','2','1','2','1','1','2','1','2','2','1'],                           
    })

# df to store all unique places
uniquePlaces = pd.DataFrame(df["Place"].unique(), columns=["Place"])

# Start stores index of df where the place appears 1st
uniquePlaces["Start"] = -1

# End stores index of df where the place appears last 
uniquePlaces["End"] = -1

def assign_place_label(group):

    ''' Create a label column that calculates the amount of unique meetings 
        throughout the racing schedule '''

    label = uniquePlaces[uniquePlaces["Place"] == group.name].index[0]
    group["Place Label"] = label
    uniquePlaces.loc[label, "Start"] = group.index.min()
    uniquePlaces.loc[label, "End"] = group.index.max()+1
    return group

df2 = df.groupby("Place").apply(assign_place_label)


def calc_groups(uniquePlaces, df2):

    ## group need to be changed only when a group starts or finishes
    change_points = np.sort(uniquePlaces[["Start", "End"]].values.ravel()).reshape(-1,1)

    ## for each change points find boolean indxes for places (True if place is in use at that point)
    inds = (change_points>=uniquePlaces["Start"].values) & (change_points<uniquePlaces["End"].values)

    ## all available indexes for place
    all_ind = set(uniquePlaces.index.values+1)
    prev_ind = np.array([0]*len(all_ind))

    result = []
    for ind in inds:
        ## copy prev_ind where place exists
        new_ind = prev_ind * ind
        ## mark places with index greater than available places with -1
        new_ind[new_ind>sum(ind)] = -1
        ## mark existing places with index 0 with -1
        new_ind[(new_ind==0) & ind] = -1

        available_ind = all_ind - set(new_ind[new_ind>0])

        ## replace indxes marked by -1 with minimum values from available_ind
        for i in range(len(new_ind)):
            if new_ind[i]==-1:
                new_ind[i] = min(available_ind)
                available_ind.remove(new_ind[i])

        result.append(new_ind)
        prev_ind = new_ind

    result = np.r_[result]
    repeats = np.r_[change_points[1:] - change_points[:-1], [[0]]].ravel()

    ## place index calculated only for change points, now fill the gap between change points
    ## by repeating index in the gap
    result = np.repeat(result, repeats, axis=0)

    df2["group"] = (result[np.arange(len(result)), df2["Place Label"].values]-1)//3 + 1
    return df2


df2 = calc_groups(uniquePlaces, df2)
df2.drop_duplicates(subset=['Period','Place'])