2

情况如下:

我使用该方法发送登录请求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我的请求所需的内容?在文档中没有详细介绍实际实现,我也没有看到任何示例。

4

1 回答 1

1

与 iOS 和 .NET SDK 不同,Android SDK 没有公开公开或记录的GSRequest类,因此不建议以您正在执行的方式调用请求。

相反,您应该GSAPI.sendRequest使用GSResponseListener. GSResponseListener 将有一个带有方法的响应对象,getData可以调用该方法来获取从请求返回的所有参数的字典对象。

我们在 GitHub 上托管的Gigya CS Android 演示中提供了如何完成此操作的示例,可以在文件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.

于 2016-01-06T23:09:19.640 回答