Как получить информацию authData из объекта ParseUser?

#android #parse-platform

#Android #синтаксический анализ-платформа

Вопрос:

Если я войду в систему, используя ParseFacebookUtils.logIn(), я получаю экземпляр ParseUser. При отладке я могу проверить поле authData JSON, которое содержит некоторые ключи: id, access_token, expiration_date… Однако, как я могу получить эту информацию authData JSON из кода? Я пробовал ParseUser.getJSONObject («facebook»), ParseUser.getJSONObject («authData») и т.д. Но ничего не работает.

В документации ничего не сказано:https://parse.com/docs/android/api/com/parse/ParseUser.html

Ответ №1:

Поскольку вы можете видеть обязательные поля JSON, я полагаю, что ParseFacebookUtils выполняет успешный вход в систему. Как только обратный вызов login () вернет пользователю значение not null, сделайте это внутри обратного вызова.

 Request.executeMeRequestAsync(Session.getActiveSession(), new Request.GraphUserCallback() {
// callback after Graph API response with user object
    @Override
    public void onCompleted(GraphUser user, Response response) {            
    String fullName = user.getName();
    String email = user.getProperty("email").toString();
    String facebookId = user.getId();

    //Do whatever you want

    }
}); 
  

Убедитесь, что добавили правильный импорт. А для электронной почты вам нужно запросить разрешение при входе в систему.

Комментарии:

1. Спасибо! Похоже, это способ ее получить. Жаль, что я должен сделать еще один асинхронный запрос для анализа данных, которые уже загружены (но сохранены в закрытом поле). Я пока обойдусь этим решением, но я обеспокоен, потому что executeMeRequestAsync () является устаревшим методом:-(

2. Я не знаю, сможем ли мы избежать другого запроса, но попробуйте использовать Request.newMeRequest вместо executeMeRequestAsync . 🙂

Ответ №2:

Предполагая, что вы используете логин parse facebook: после первого входа в facebook

logInWithReadPermissionsInBackground…bla bla bla

затем:

 ParseUser parseUser = ParseUser.getCurrentUser();
 Map<String,Map> authObject = parseUser.getMap("authData");
 Map<String,String> fbParseLoginData =  (Map<String,String>)    authObject.get("facebook");

String parseFacebookId = (String)fbParseLoginData.get("id");

String parseFacebookAuthData = (String)fbParseLoginData.get("access_token");
  

извините за неправильное наименование переменной 😉

Ответ №3:

Ответ на вход в систему находится в разделе Rest docs при входе пользователя в систему и выглядит следующим образом:

 "username": "cooldude6",
  "phone": "415-392-0202",
  "createdAt": "2011-11-07T20:58:34.448Z",
  "updatedAt": "2011-11-07T20:58:34.448Z",
  "objectId": "g7y9tkhB7O",
  "sessionToken": "pnktnjyb996sj4p156gjtp4im"
  

В Rest api это может быть использовано следующим образом:

 mBmpNode= new ObjectMapper().readValue(new ByteArrayInputStream(response), 
JsonNode.class);
str_id = mBmpNode.path("objectId").getTextValue();   // or 'sessionToken', 'username'
  

посмотрите на эти имена элементов JSON и просто используйте их вместо того, что вы использовали, и у вас все должно получиться. Не ‘facebook’, а имя в http-ответе, например ‘ObjectId’.

Вы должны знать фактическое имя элемента JSON…

получите это, прочитав документы более внимательно или используя проводную отладку http-трафика.

Комментарии:

1. Извините, но этот ответ выглядит так, как будто он не имеет ничего общего с ParseFacebookUtils. logIn(). Нет параметра ‘response’, только экземпляры ParseUser и ParseException. Я знаю, как получить поле JSON из объекта JSON, моя проблема в том, как получить объект JSON, который мне нужен в первую очередь.

Ответ №4:

 HashMap hash1 = (HashMap) parseUser.get("authData");

HashMap hash2 = (HashMap) hash1.get("facebook");

String id = hash2.get("id");