通过Open Graph共享给Facebook的照片已破坏"应用程序名称链接"

时间:2016-10-16 22:44:15

标签: ios facebook-graph-api facebook-php-sdk facebook-opengraph facebook-sdk-4.0

首先:我会尝试发布尽可能多的截图和尽可能多的代码示例,以获得我们需要的帮助,谢谢!

问题

我们有一个照片移动应用,其设置允许用户在上传时自动自动将应用内照片分享到Facebook 。我们将这些照片称为时刻,实际分享工作正常。

应用程序名称链接(这些名为 attributions ?)是否已损坏。

在我们的FB应用程序Open Graph设置中,除了其他对象之外,我们还有一个名为moment的对象,一个名为share的动作,以及一个连接这两个对象的故事。

这是一个共享的时刻"看起来像FB:

Moment shared on Facebook

它由我们的后端服务器共享,后端服务器基于PHP微框架 Lumen 。以下是相关的共享代码:

/**
 * @param User $user
 * @param Moment $moment
 */
public function shareMoment(User $user, Moment $moment)
{
    $facebookAccount = $this->facebookMapper->getFacebookAccountInfo($user);
    $fb = new Facebook(array('app_id' => $this->facebookAppId, 'app_secret' => $this->facebookAppSecret));
    $postPayload = [
        'moment' => UrlUtility::getMomentOpenGraphPageUrl($moment->getGuid()),
        'fb:explicitly_shared' => true,
        'image' => [
            [
                'url' => UrlUtility::getMomentWatermarkedImageFileUrl($moment),
                'user_generated' => true
            ]
        ]
    ];
    if ($moment->hasDescription()) {
        $postPayload['message'] = $moment->getDescription();
    }
    try {
        $postPath = 'me/' . $this->facebookAppNamespace . ':share';
        $response = $fb->post($postPath, $postPayload, $facebookAccount->getAccessToken());
    } catch (FacebookSDKException $e) {
        ...
        return;
    }
}

getMomentOpenGraphPageUrl(...)方法为生成的包含moment对象元数据的OG页面提供了一个URL。

问题很可能在于此OG页面及其元数据。

按上面屏幕截图中 1 所示的应用链接会产生以下结果:

Broken FB app attribution link

按上面屏幕截图中 2 所示的第二个应用链接会产生以下结果:

Unwanted FB app attribution behaviour

要明确:

我们希望链接在安装后打开应用程序,或者转到应用程序/我们的FB应用程序页面。

在Android中,此行为似乎只是工作。它在Android中表现完美。这些链接打开了我们的应用程序iOS正在成为一场噩梦。

第二个链接不会像第一个链接那样中断,但它链接到moment对象的OG URL,我们 >想要。我们不希望FB应用中的任何点击转到这些链接,就像它们是一个网站一样。

我们只是希望在FB上分享照片,而我们的应用程序名称链接"充当应用程序打开链接。没有外部网站式的行为。

最后,我将向您展示我们的moment OG页面生成的HTML,如上所述(显然,CAPITALIZED项目是我编辑的内容):

<html>
<head
    prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# FBAPPNAME: http://ogp.me/ns/fb/FBAPPNAME#">
    <title>APPNAME Moment</title>

    <meta property="fb:app_id" content="FB_APP_ID"/>
    <meta property="og:title" content=""/>
    <!-- <meta property="og:determiner" content="a"/> -->
    <meta property="og:description" content="A moment shared with APP NAME"/>
    <meta property="og:image" content="https://SERVERURL.com/shared/moments/pO_8Lx3CkJY.jpg"/>
    <meta property="og:url" content="https://SERVERURL.com/og/moment/pO_8Lx3CkJY"/>
    <meta property="og:type" content="versetheapp:moment"/>

    <!-- iOS FB meta tags -->
    <meta property="al:ios:url" content="IOSSCHEME://moment/372"/>
    <meta property="al:ios:app_store_id" content="APP_STORE_ID"/>
    <meta property="al:ios:app_name" content="APP NAME"/>

    <style>
        body {
            background-color: #2d2d2d;
        }

        .momentImage {
            display: block;
            margin-left: auto;
            margin-right: auto;
        }
    </style>

</head>
<body>
<div id="momentContainer">
    <img src="/moments/pO_8Lx3CkJY.jpg" class="momentImage"/>
</div>
</body>
</html>

在这里奄奄一息,已经有数周的时间来解决这个问题了,现在它已成为制作中一个令人尴尬的问题,现在我们允许人们将他们的新时刻分享给Facebook。

非常感谢任何帮助,谢谢! :)

0 个答案:

没有答案