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