Получить регТокен от GSResponse
Ситуация следующая:
Я отправляю запрос на вход, используя метод showLoginUI
а затем, после выбора провайдера (Twitter, g+ и т. д.), приложение переходит к onError
обратный звонок моего GSLoginUIListener
с ошибкой "Аккаунт ожидает регистрации". До этого момента все нормально. Проблема в том, когда я пытаюсь создать другой GSRequest
с помощью метода "accounts.setAccountInfo", как в следующем коде:
GSRequest setAccountInfoRequest = new GSRequest(getString(R.string.gigya_api_key),"accounts.setAccountInfo");
Как параметр, я считаю, что я должен добавить regToken
а где его взять? В iOS SDK есть объект Error (который вы получаете из GSResponse
это позволяет вам получить это так:
token = error.userInfo["regToken"]
Но на Android SDK ничего подобного из GSResponse
Я просто могу получить код ошибки, сообщение об ошибке и подробности ошибки. Итак, вкратце, как я могу получить regToken
что мне нужно для моего запроса? В документации не вдаваться в детали фактической реализации и я не видел никаких примеров.
1 ответ
В отличие от iOS и.NET SDK, Android SDK не имеет общедоступной или документированной GSRequest
класс, поэтому вызывать запрос так, как вы это делаете, не рекомендуется.
Вместо этого вы должны использовать GSAPI.sendRequest
с GSResponseListener
, GSResponseListener будет иметь объект ответа с методом getData
который может быть вызван для получения объекта словаря всех параметров, возвращаемых из запроса.
Пример того, как это можно сделать, представлен в нашей демонстрационной версии Gigya CS для Android, размещенной на GitHub, и может быть рассмотрен в файле SessionInfoFragment.java@121-191.
public void refreshView() {
GSAPI gigya = GSAPI.getInstance();
final TextView statusText = (TextView) rootView.findViewById(R.id.status_value);
final TextView nameText = (TextView) rootView.findViewById(R.id.name_value);
final TextView emailText = (TextView) rootView.findViewById(R.id.email_value);
final ImageView avatarView = (ImageView) rootView.findViewById(R.id.avatar);
if (gigya.getSession() != null){
if (gigya.getSession().isValid()) {
MainActivity parent = (MainActivity) getActivity();
GSObject user = parent.getUser();
// Retrieve the user if it's not set. (Reloaded app with active session)
if (user == null) {
GSResponseListener resListener = new GSResponseListener() {
@Override
public void onGSResponse(String method, GSResponse response, Object context) {
try {
if (response.getErrorCode()==0) { // SUCCESS! response status = OK
MainActivity parent = (MainActivity) getActivity();
Log.w("Gigya-Android-Demos", "Successfully set user");
parent.setUser(response.getData());
setLoggedIn(statusText, nameText, emailText, avatarView, response.getData());
} else { // Error
Log.w("Gigya-Android-Demos", "GSResponse: 'getAccountInfo' returned an error");
Log.w("Gigya-Android-Demos", response.getErrorMessage());
}
} catch (Exception ex) { ex.printStackTrace(); }
}
};
GSAPI.getInstance()
.sendRequest("accounts.getAccountInfo", null, resListener, null );
} else {
// Grab the user data
setLoggedIn(statusText, nameText, emailText, avatarView, user);
}
} else {
setLoggedOut(statusText, nameText, emailText, avatarView);
}
} else {
setLoggedOut(statusText, nameText, emailText, avatarView);
}
}
public void setLoggedOut(TextView status, TextView name, TextView email, ImageView avatar) {
status.setText(getString(R.string.logged_out));
name.setText(getString(R.string.null_value));
email.setText(getString(R.string.null_value));
setUnknownAvatar(avatar);
}
public void setLoggedIn(TextView status, TextView name, TextView emailView, ImageView avatar, GSObject user) {
status.setText(getString(R.string.logged_in));
try {
GSObject profile = user.getObject("profile");
String first = profile.getString("firstName");
String last = profile.getString("lastName");
String email = profile.getString("email");
if (profile.containsKey("photoURL")) {
setAvatar(avatar,profile.getString("photoURL"));
} else {
setUnknownAvatar(avatar);
}
name.setText(first + " " + last);
emailView.setText(email);
} catch (Exception ex) {
Log.w("Gigya-Android-Demos", "Something went horribly wrong with the user!");
ex.printStackTrace();
}
}
Вы должны заметить использование getData()
а также GSObject
классы по всему примеру. Используя этот метод подачи запроса, вы сможете изучить данные ответов, включая regToken
,