您如何将应用程序 links 与 ios 中的 facebook 分享按钮一起使用以深入 link?

How do you use app links with facebook share button in ios to deep link?

我正在尝试使用 fb 共享按钮从我的应用程序创建 posts 到 facebook。我希望这个 post 到 link 使用 applinks 返回到应用程序。我不明白如何向 facebook url 添加数据,因此它知道在单击 link 时将应用定向到何处。

FBSDKShareLinkContent * content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"https://fb.me/123456789"];
FBSDKShareButton * button = [[FBSDKShareButton alloc] init];
button.shareContent = content;
[self.view addSubview:button];

这有效,但我尝试添加到 fb url 的任何查询都会中断,并且不再 links 到应用程序。例如:

 content.contentURL = [NSURL URLWithString:@"https://fb.me/123456789?my_view=news"];

这是他的错误做法吗?我也尝试使用 json 编码和 al_applink_data 但对原始 url 的任何更改都会使 post link 发送到图像 url 并且不是应用 link.

您实际上在此流程中使用了两种不同的 Facebook 工具:

  1. 您的应用程序中的 FBSDK 共享 link(看起来您可能已经从 here 获得了您的代码示例?)
  2. 打开 link 时启动您的应用程序的 Facebook 应用程序链接。

Facebook 用于应用程序链接的过程实际上有点复杂...不幸的是,它并不像仅附加一个 URL 参数那么简单。以下是其工作原理的概述 (source):

  1. 您 post link 您的内容(您为此使用了 FBSDK)
  2. link 指向托管一些特殊应用程序链接元标记的页面。其中之一看起来像 <meta property="al:ios:url" content="yourapp://path/to/content" /> 当 Facebook 抓取 link 并看到这些标签时,它会将 link 标记为已启用应用程序链接。您可以将这些标签添加到您自己的网站,如果您有一个并且 link 指向它,或者如果您没有,Facebook 会提供 Mobile Hosting API(您似乎正在使用)一个网站。
  3. 当用户打开此 link 时,您的应用将启动,您将收到一个 URL 像这样的 您的应用必须处理的为自己: yourapp://path/to/content?al_applink_data=JSON_ENCODED_DATA。不幸的是,重定向到应用程序中的正确位置并不神奇,并且假设您已将应用程序设置为根据 URL 方案结构显示内容。 Facebook offers a walkthrough,但基本上你需要在 AppDelegate.m:

    中添加类似这样的内容
    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplication
             annotation:(id)annotation {
        BFURL *parsedUrl = [BFURL URLWithInboundURL:url sourceApplication:sourceApplication];
        if ([parsedUrl appLinkData]) {
            // this is an applink url, handle it here
            NSURL *targetUrl = [parsedUrl targetURL];
            [[[UIAlertView alloc] initWithTitle:@"Received link:"
                                        message:[targetUrl absoluteString]
                                       delegate:nil
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil] show];
        }
        ...
    }
    

虽然这仅涵盖您通过 Facebook 分享的内容,但不会涉及 URL 方案深度 links 或 Apple 在 iOS 9 中的新通用链接的混乱. 如果你想处理所有这些,除了 Facebook App Links,你可以考虑像 Branch.io 这样的免费服务(完全披露:他们太棒了,我和他们一起工作)来处理所有技术为您详细介绍。