ios - 你如何在 ios 中使用带有 facebook 共享按钮的应用程序链接来进行深度链接?

标签 ios facebook deep-linking applinks

我正在尝试使用 fb 分享按钮从我的应用程序创建发布到 facebook 的帖子。我希望这篇文章使用 applinks 链接回应用程序。我不明白如何将数据添加到 facebook url,以便它知道在单击链接时将应用定向到哪里。

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 的任何查询都会中断,并且不再链接到该应用程序。例如:

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

这是他错误的做法吗?我还尝试使用 json 编码和 al_applink_data,但对原始 url 的任何更改都会使帖子链接指向发送的图像 url,而不是应用程序链接。

最佳答案

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

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

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

  1. 您发布指向您的内容的链接(为此您正在使用 FBSDK)
  2. 该链接指向托管一些特殊应用程序链接元标记的页面。其中之一看起来像 <meta property="al:ios:url" content="yourapp://path/to/content" />当 Facebook 抓取链接并看到这些标签时,它会将链接标记为已启用 App Links。您可以将这些标签添加到您自己的网站,如果您有一个并且链接指向它,或者 Facebook 提供了 Mobile Hosting API (您似乎正在使用)如果您没有网站。
  3. 当用户打开此链接时,您的应用将启动,您将收到一个这样的 URL,您的应用必须自行处理该 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 方案深层链接或 Apple 在 iOS 9 中新的通用链接的困惑情况。如果您想处理所有这些,除了 Facebook 应用程序链接,你可以考虑像Branch.io这样的免费服务(完全披露:他们太棒了,我和他们一起工作)为您处理所有技术细节。

关于ios - 你如何在 ios 中使用带有 facebook 共享按钮的应用程序链接来进行深度链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35863034/

相关文章:

swift - 当应用程序处于非事件状态时,从本地通知打开深层链接

ios - 在 UIViewController 中使用 UITableView 的搜索栏

ios - 在 VIewController 之间共享数据 - iOS

php - Facebook Graph API 共同好友

Ajax 深度链接?

javascript - 尚未创建导航器时如何从链接导航(与 branch.io 的深度链接)?

ios - 无法访问XCTest中以编程方式添加的UIView

ios - 如何区分 CardDAV 联系人来源?

django - 我应该在 'Server IP Whitelist' facebook 开发者控制台上放置哪个 IP 地址? (来自 Facebook 的 400 错误)

facebook - Facebook 测试用户如何填充它的喜欢?