我正在尝试使用 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 工具:
- 您的应用程序中用于共享链接的 FBSDK(看起来您可能已经从 here 获得了您的代码示例?)
- Facebook 应用程序链接,用于在链接打开时启动您的应用程序。
Facebook 用于应用程序链接的过程实际上有点复杂……不幸的是,它不像附加 URL 参数那么简单。以下是其工作原理的概述 (source):
- 您发布指向您的内容的链接(为此您正在使用 FBSDK)
- 该链接指向托管一些特殊应用程序链接元标记的页面。其中之一看起来像
<meta property="al:ios:url" content="yourapp://path/to/content" />
当 Facebook 抓取链接并看到这些标签时,它会将链接标记为已启用 App Links。您可以将这些标签添加到您自己的网站,如果您有一个并且链接指向它,或者 Facebook 提供了 Mobile Hosting API (您似乎正在使用)如果您没有网站。 当用户打开此链接时,您的应用将启动,您将收到一个这样的 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/