6
votes

Contenu des fans uniquement sur Facebook avec ASP.NET C # SDK

hi je développe une application sur Facebook avec C # SDK et je souhaite que l'utilisateur qui a aimé ma page ne peut utiliser que ma demande. (Comme WOOBOX )

J'ai trouvé des solutions dans php dans Ce lien mais il n'y a pas de Source sur .net Comment puis-je obtenir les informations aimées dans ASP.NET

Je trouve un autre exemple de php dans Ceci < / a> lien encore mais je ne peux pas trouver c # réponse: \

merci


2 commentaires

Pourriez-vous expliquer pourquoi la réponse existante n'est-elle pas ce que vous recherchez?


Parce qu'il a besoin d'autorisations, j'ai besoin d'un code sans obtenir la permission comme WOOBOX.


5 Réponses :


1
votes
this.canvasAuthorizer = new CanvasAuthorizer {
    Permissions = new[] { "user_about_me", "publish_stream", "offline_access", "user_likes", "friends_about_me" }
};

this.canvasAuthorizer.Authorize();

if (FacebookWebContext.Current.IsAuthorized())
{
    this.facebookWebClient = new FacebookWebClient(FacebookWebContext.Current);

    string requested_Data = HttpContext.Current.Request.Form["signed_request"];
    dynamic decodedSignedRequest = FacebookSignedRequest.Parse(this.facebookApplication, requested_Data);

    if (decodedSignedRequest.Data.page != null)
    {
        // Funs Page
        this.IsLike = decodedSignedRequest.Data.page.liked;
    }
    else
    {
        // Application Page
        dynamic likes = this.facebookWebClient.Get("/me/likes");
        foreach (dynamic like in likes.data)
        {
            if (like.id == this.FacebookFanPageID)
            {
                this.IsLike = true;
            }
        }
    }
}

0 commentaires

4
votes

Ceci n'est possible qu'avec les API hérités ou avec le user_likes Permission . Comme vous voulez une solution sans autorisations spécifiques, je vous montrerai 2 méthodes. Utilisez-les en combinaison avec Ajax pour rafraîchir la page lorsqu'un utilisateur appuie sur comme code>.

option 1) API de repos p>

Utilisation de l'API héritée, il est possible d'utiliser pages./a> p> xxx pré>

Faites ceci en c # comme suit. P> xxx pré>

option 2) côté client p>

la méthode fbxml code>. Ceci est fait avec JavaScript sur le client, en vous abonnant à un événement lorsque l'utilisateur clique sur le bouton comme code>. Il est documenté ici . P>

Comment puis-je savoir quand un utilisateur clique sur un bouton similaire? strong> p>

Si vous utilisez la version XFBML du bouton, vous pouvez vous abonner à l'événement 'Edge.create' via fb.event.subscribe. p> blockQuote>

générer un bouton de type FBXML ici . p> xxx pré>

puis abonnez-vous à la bord.create code> à l'aide de sdk javascript . Placez ce code dans le document Corps CODE> de préférence juste avant la fin. P>

<script type="text/javascript">
<!--
    window.fbAsyncInit = function () {
        FB.init({ appId: '245693305442004', status: true, cookie: true, xfbml: true });
        FB.Event.subscribe('edge.create',
            function (href, widget) {
                // Do something here
                alert('User just liked '+href);

            });
            (function () {
                var e = document.createElement('script'); e.async = true;
                e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
                document.getElementById('fb-root').appendChild(e);
            } ());
    };
//-->
</script>


6 commentaires

Salut @Checodageking je vais essayer l'option 2 mais pouvez-vous me dire comment pouvez-vous obtenir UID en option1? Parce que dans ce cas, l'utilisateur n'a pas donné la permission de nous donner une information et sans UID, je ne peux pas obtenir la page.


Salut encore j'ai essayé l'option 2 mais cela fonctionne lorsque l'utilisateur aime ou n'aime pas une page, mais je ne pouvais pas obtenir cela si l'utilisateur aime la page avant: \ Avez-vous une opinion? Merci.


Je pense que vous obtenez l'UID si vous ajoutez un bouton de connexion afin que les utilisateurs soient connectés à votre page. Theres une fonction fb.getuserid.


Dans l'application Canvas, je ne peux pas avoir de bouton de connexion Facebook (ce n'est pas logique car l'utilisateur est déjà connecté à Facebook), donc je ne peux donc pas obtenir l'identifiant de l'utilisateur?


Si l'utilisateur est déjà connecté, j'aurais pensé que vous pouvez simplement appeler fb.getuserid () sur le client. Cela ne fonctionne-t-il pas?


Apparemment, si vous appelez l'API Isfan sans UID, cela déduira l'utilisateur connecté actuellement, cela nécessite évidemment un appel côté client.



1
votes

Si votre application est une application en toile, vous pourriez (devriez-vous?) Utilisez le signé_request A> Paramètre Pour vérifier si l'utilisateur aime la page, c'est sur:

Request["signed_request"]


2 commentaires

Salut @CHesles pouvez-vous me donner des informations sur décod_signed_request ()?


Consultez la "Vérifier et décoder" en direction de Signé_Request Docs pour un contour sur Comment implémenter cela. Il y a 2 parties, une signature et une charge utile. La charge utile est juste BASE64 codé , vous devrez donc déterminer comment le décoder en C #; Je ne suis pas un gars .net mais je suis sûr qu'il y a une bibliothèque de décodeur quelque part.



0
votes

Ceci peut être effectué en PHP à l'aide d'une requête SQL

`$result = $facebook->api(array(  "method"    => "fql.query",
                                  "query"     => "SELECT uid FROM page_fan WHERE uid=$uid AND page_id=$page_id"
                               ));


2 commentaires

Même problème que je ne pouvais pas obtenir de l'uid sans obtenir la permission afin que cela ne fonctionne pas: \


Voir sans créer une session FB Vous ne pouvez accéder à aucun détail à l'intérieur d'une application .. La première étape posera toujours 4 ensemble de base d'autorisations (selon vos besoins par votre application). Ensuite, dans les étapes suivantes, vous pouvez décider en fonction de l'UID si cette personne aime votre page ou non ..



10
votes

Vous obtenez une demande signée lorsque votre page Web est chargée dans Facebook Canvas App; Vous devriez être capable d'analyser une demande signée quelque chose de similaire à suivre:

if (Request.Params["signed_request"] != null)
{
    string payload = Request.Params["signed_request"].Split('.')[1];
    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 o = JObject.Parse(json);
    var lPid = Convert.ToString(o.SelectToken("page.id")).Replace("\"", "");
    var lLiked = Convert.ToString(o.SelectToken("page.liked")).Replace("\"", "");
    var lUserId= Convert.ToString(o.SelectToken("user_id")).Replace("\"", "");
}


1 commentaires

Merci @imran tu as sauvé mon temps :)