Как вы получаете дополнительную информацию из плагина регистрации Facebook? - PullRequest
0 голосов
/ 27 января 2011

Это должно быть легко, но, используя Facebook C # SDK, как мне получить дополнительную информацию, запрошенную плагином регистрации?

Я хочу получить значение Favourite_animal.

Здесьскрипт Java для плагина.

  <script>
      FB.init({
          appId: '123123123123123', cookie: true,
          status: true, xfbml: true
      });
  </script>
     <fb:registration
        fields="[{'name':'name'}, {'name':'email'},
        {'name':'Favourite_Animal','description':'What is your favourite animal?',
        'type':'text'}]" redirect-uri="http://XXXXXX.com/FacebookAuth2/Account/Home">
</fb:registration>

Ответы [ 2 ]

0 голосов
/ 10 марта 2011

Вы можете получить дополнительную информацию из плагина регистрации, используя последнюю версию SDK Facebook C #.

Просто вызовите статический метод Parse для класса FacebookSignedRequest, как показано ниже (с секретом вашего приложения,и подписанный запрос):

var DecodedSignedRequest = FacebookSignedRequest.Parse(FacebookContext.Current.AppSecret, SignedRequest);

Теперь вы увидите все данные из подписанного запроса в DecodedSignedRequest, включая данные плагина регистрации в виде объектов JSON.

0 голосов
/ 28 января 2011

ОК. Я новичок в этой библиотеке, но похоже, что вы не можете получить эти значения.Я сделал некоторые изменения в Facebook.dll Специально в классе Facebook.FacebookSignedRequest. Я добавил последние 6 строк кода в этот фрагмент ниже, который взят из конструктора для класса.Нижняя строка создает открытое свойство «Регистрация», а строки над ним помещают данные в поле.

 public FacebookSignedRequest(IDictionary<string, object> value)
    {
        this.UserId = value.ContainsKey("user_id") ? (string)value["user_id"] : null;
        this.AccessToken = value.ContainsKey("oauth_token") ? (string)value["oauth_token"] : null;
        this.Expires = value.ContainsKey("expires") ? DateTimeConvertor.FromUnixTime(Convert.ToInt64(value["expires"])) : DateTime.MinValue;
        this.IssuedAt = value.ContainsKey("issued_at") ? DateTimeConvertor.FromUnixTime(Convert.ToInt64(value["issued_at"])) : DateTime.MinValue;
        this.ProfileId = value.ContainsKey("profile_id") ? (string)value["profile_id"] : null;
        this.Algorithm = value.ContainsKey("algorithm") ? (string)value["algorithm"] : null;

        if (value.ContainsKey("user"))
        {
            var user = (IDictionary<string, object>)value["user"];
            this.User = new FacebookSignedRequestUser
            {
                Country = value.ContainsKey("country") ? (string)user["country"] : null,
                Locale = value.ContainsKey("locale") ? (string)user["locale"] : null,
            };
        }

        if (value.ContainsKey("registration"))
        {
            this.Registration = (IDictionary<string, object>)value["registration"];
        }

    }
    /// <summary>
    /// Gets or sets th key value pairs from the Registration plugin input fields. Accessibile even if user chooses not to use Facebook for registration
    /// </summary>
    public IDictionary<string, object> Registration { get; set; }

Теперь к любым полям, которые я добавляю в плагин регистрации, я могу обращаться по имени.Надеюсь, это поможет кому-то еще.Не стесняйтесь опубликовать лучшую идею.

FacebookApp app = new FacebookApp();

        Authorizer authorizer = new Authorizer(app);
        if (authorizer.Authorize())
        {
            object returnValue;
            app.SignedRequest.Registration.TryGetValue("Fovourite_Animal", out returnValue);
...