Получить регТокен от 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,

Другие вопросы по тегам