2013-07-18 2 views
1

J'essaie le modèle et le «framework» ASP.Net MVC 4 Facebook et j'ai du mal à obtenir de l'aide sur Internet, à l'exception de l'application «Birthday " échantillon.Comme le mécanisme de la porte avec Asp.Net MVC Facebook

Je construis une simple application Facebook avec un "like gate", ce qui signifie que les gens ne devraient pouvoir accéder à l'application que s'ils ont "aimé" une certaine page.

Mon idée est de vérifier dans le contrôleur si l'utilisateur a "aimé" la page du ventilateur et si ce n'est pas le cas, le rediriger vers la vue "LikeFirst".

est ici le contrôleur, directement à partir du modèle:

[FacebookAuthorize("email", "user_photos")] 
    public async Task<ActionResult> Index(FacebookContext context) 
    { 
     if (ModelState.IsValid) 
     { 
      var user = await context.Client.GetCurrentUserAsync<MyAppUser>(); 

      if(//how check the user has liked the fan page) 
      { 
      return View(user); 
      } 
      else 
      { 
      return View("LikeFirst"); 
      } 
     } 

     return View("Error"); 
    } 

D'après ce que je suis arrivé dans l'échantillon, le cadre utilise en fait l'objet « MyAppUser » pour construire la requête Facebook.

Ceci est le type utilisé dans l'exemple d'application.

public class MyAppUser 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 

    [JsonProperty("picture")] // This renames the property to picture. 
    [FacebookFieldModifier("type(large)")] // This sets the picture size to large. 
    public FacebookConnection<FacebookPicture> ProfilePicture { get; set; } 

    [FacebookFieldModifier("limit(8)")] // This sets the size of the friend list to 8, remove it to get all friends. 
    public FacebookGroupConnection<MyAppUserFriendSimple> Friends { get; set; } 

    [FacebookFieldModifier("limit(16)")] // This sets the size of the photo list to 16, remove it to get all photos. 
    public FacebookGroupConnection<FacebookPhoto> Photos { get; set; } 
} 

De la documentation Facebook, je devrais être en mesure de vérifier que simplement par faire une requête HTTP GET à/PROFILE_ID/aime/page_id, mais comment dois-je faire en utilisant le framework ASP.Net MVC Facebook? Y a-t-il quelque chose que je peux changer dans la classe MyAppUser? Est-ce quelque chose de complètement différent?

Merci!

Répondre

2

Donc avait ce défi ce matin - a dû bricoler un peu pour le comprendre. Voici ce que vous faites

DEVENEZ « Likes » propriété sur votre type d'utilisateur

public class MyAppUser 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 

    public FacebookGroupConnection<FacebookLike> Likes { get; set; } 

    ... 
} 

Bien sûr, cela signifie que vous devez créer un type de FacebookLike

public class FacebookLike 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

Ajouter la chaîne d'autorisation suivante votre FacebookAuthorizeAttribute

[FacebookAuthorize("email", "user_photos", "user_likes")] 
    public async Task<ActionResult> Index(FacebookContext context) 
    { 
     ... 
    } 

et enfin de découvrir utilisateur e aime votre page, vous trouverez votre page Id et placez le code suivant dans la méthode du contrôleur pertinent dans lequel vous souhaitez effectuer la vérification -

  if (user.Likes.Data.FirstOrDefault(like => like.Id == "<your_fb_pageid>") == null) 
      { 
       return View("LikeUs"); 
      } 

Hope this helps

+0

C'est ce que je aussi testé, mais je n'aime pas qu'il obtient toutes les pages que l'utilisateur aime juste pour vérifier qu'il aime une page spécifique. Dans l'API il y a définitivement un moyen de vérifier que l'utilisateur n'aime qu'une page, mais je n'ai aucune idée de comment l'appeler en utilisant le template Facebook MVC. – Gimly

1

Sur la base de réponse de Cordell Lawrence , en fait, si vous voulez vérifier que si un utilisateur a ajouté une page, un FacebookFieldModifier pourrait être ajouté

public class MyAppUser 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 

    [FacebookFieldModifier("id({PAGE_ID})")] 
    public FacebookGroupConnection<FacebookLike> Likes { get; set; } 

    ... 
} 

classe FacebookLike

public class FacebookLike 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

obtenir la permission de l'utilisateur de

[FacebookAuthorize("email", "user_photos", "user_likes")] 
public async Task<ActionResult> Index(FacebookContext context) 
{ 
    ... 
} 

La chose la plus importante est le FacebookFieldModifier. Si l'utilisateur n'a pas aimé la page, la liste retournée de Facebook sera vide

Je n'ai pas essayé de compiler les codes ci-dessus, espérons que cette aide

+0

Salut, j'ai un problème en utilisant Facebook comme bouton, pouvez-vous répondre [cette] question (http://stackoverflow.com/questions/29277265/absolute-url-for-facebook-like-button-in-asp-mvc) – stom

Questions connexes