Страница фанатов Facebook «Нравится» остается на странице Fangate, а не на стене - PullRequest
1 голос
/ 22 ноября 2011

Требуемое поведение: После использования кнопки «Нравится» в верхней части страницы моего поклонника я хочу, чтобы пользователь был отправлен на стену.

Текущее поведение: Пользователь остается на странице фангейта (пользовательская вкладка, которая устанавливается в качестве целевой страницы по умолчанию для моей фан-страницы).

Из того, что я могу сказать из другого вопроса здесь , я не могу управлять событиями, которые запускаются после того, как кто-то "любит" мою страницу, если он использует кнопку вверху страницы.

Однако я был на некоторых фанатских страницах, которые ДЕЙСТВУЮТ, что я хочу. Я просто не могу понять, как они это сделали. Пример: Страница поклонника StrongMail на Facebook

РЕДАКТИРОВАТЬ: Добавлена ​​информация - Мы используем iframe для Fangate (в случае необходимости)

1 Ответ

2 голосов
/ 22 ноября 2011

РЕДАКТИРОВАТЬ: Если вы хотите показывать определенный контент вместо того, чтобы идти к стене, сделайте абсолютное позиционирование div поверх скрытого контента и скройте div, когда оно нравится.

Если выиспользую C # ASP.Net, у меня никогда не было проблем с использованием этой техники.Вы можете проверить signed_request и декодировать, используя JObject, а затем перенаправить по мере необходимости.

Проверьте это: Как декодировать OAuth 2.0 для Canvas Sign_Request в C #?

Вам нужно скачать и сослаться на JSON.Net отсюда: Json.NET

На странице загрузки:

if (Request.Form["signed_request"] != null)
    {
        var result = (IDictionary)DecodePayload(Request.Form["signed_request"].Split('.')[1]);

        JObject liked = JObject.Parse(result["page"].ToString());

        if (liked["liked"].ToString().Trim().ToLower() == "true")
        {
           //do redirection here
        }
    }

Функция декодирования полезной нагрузки здесь:

public Dictionary<string, string> DecodePayload(string payload)
{
    var encoding = new UTF8Encoding();
    var decodedJson = payload.Replace("=", string.Empty).Replace('-', '+').Replace('_', '/');
    var base64JsonArray = Convert.FromBase64String(decodedJson.PadRight(decodedJson.Length + (4 - decodedJson.Length % 4) % 4, '='));
    var json = encoding.GetString(base64JsonArray);
    var jObject = JObject.Parse(json);

    var parameters = new Dictionary<string, string>();
    parameters.Add("user_id", (string)jObject["user_id"] ?? "");
    parameters.Add("oauth_token", (string)jObject["oauth_token"] ?? "");
    var expires = ((long?)jObject["expires"] ?? 0);
    parameters.Add("expires", expires > 0 ? expires.ToString() : "");
    parameters.Add("profile_id", (string)jObject["profile_id"] ?? "");
    parameters.Add("page", jObject["page"].ToString() ?? "");

    return parameters;
} 
...