1

ASP.Net MVC 4 Facebook テンプレートと「フレームワーク」を試していますが、「Birthday app」サンプルを除いて、インターネットで助けを得るのが難しいと感じています。

「いいねゲート」を備えた単純な Facebook アプリケーションを作成しています。つまり、特定のページに「いいね」した場合にのみアプリにアクセスできるようにする必要があります。

私の考えは、ユーザーがファンページに「いいね」したかどうかをコントローラーでチェックインし、そうでない場合は「LikeFirst」ビューにリダイレクトすることです。

テンプレートから直接取得したコントローラーは次のとおりです。

   [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");
   }

サンプルで得たものから、フレームワークは実際に "MyAppUser" オブジェクトを使用して Facebook クエリを作成します。

これは、サンプル アプリで使用される型です。

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; }
}

Facebook のドキュメントから、/PROFILE_ID/likes/PAGE_ID に対して HTTP GET を実行するだけでそれを確認できるはずですが、ASP.Net MVC Facebook フレームワークを使用してそれを行うにはどうすればよいですか? MyAppUser クラスで変更できるものはありますか? 全然違うものですか?

ありがとう!

4

2 に答える 2

2

今朝、この課題がありました-それを理解するために少しいじる必要がありました. これがあなたがすることです

ユーザー タイプに「いいね」プロパティを作成する

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

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

    ...
}

もちろん、それは FacebookLike タイプを作成する必要があることを意味します

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

次の許可文字列を FacebookAuthorizeAttribute に追加します

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

最後に、ユーザーがあなたのページを気に入っていることを確認するには、ページ ID を見つけて、チェックを実行する関連するコントローラー メソッドに次のコードを挿入します。

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

お役に立てれば

于 2013-07-22T10:06:42.193 に答える
1

Cordell Lawrence からの回答に基づいて、実際には、ユーザーがページを気に入ったかどうかのみを確認したい場合は、FacebookFieldModifier を追加できます

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; }

    ...
}

Facebookいいねクラス

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

ユーザーから許可を得る

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

最も重要なのは FacebookFieldModifier です。ユーザーがページを気に入らなかった場合、Facebook から返されるリストは空になります。

上記のコードをコンパイルしようとしたことはありません。これが役立つことを願っています

于 2014-04-06T12:46:54.730 に答える