#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");