我正在尝试对onPendingRegistration
使用Gigya回调,因为当用户使用社交媒体登录时,我们的注册需要其他详细信息。最初的社交注册工作正常,因为我可以验证用户是否存在于Gigya控制台中,但是由于挂起的注册状态,我们特定应用程序的注册无法进行。
当前,我的登录功能具有onSuccess
,onError
和onPendingRegistration
的回调。由于某种原因,它总是进入onError
回调,但是在检查日志时,它说错误是206001,即“帐户待注册”
登录功能
public void facebookLoginTapped(View view) {
processGigyaLogin(FACEBOOK);
}
private void processGigyaLogin(String loginProvider) {
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("screenSet","GIGYA-RegistrationLogin");
params.put("startScreen","gigya-complete-registration-screen");
mGigya.login(loginProvider, new HashMap<>(), new GigyaLoginCallback<MyAccount>() {
@Override
public void onSuccess(MyAccount obj) {
// Success
Log.i("GIGYA-CDC", obj.toString());
}
@Override
public void onError(GigyaError error) {
// Fail
Log.e("GIGYA-CDC", error.toString());
}
@Override
public void onPendingRegistration(@NonNull GigyaApiResponse response, @NonNull IPendingRegistrationResolver resolver) {
Log.d("GIGYA-CDC", "onPendingRegistration");
}
});
}
答案 0 :(得分:3)
我发现了问题。您需要确保本机应用程序部分正常工作才能正常工作。因此,在过去的几周中,我不得不设置社交登录名而不使用本机SDK,因为它们仍由另一个团队设置。总之,长话短说,一旦我开始与该应用程序连接本机SDK(即使用Facebook或Google应用程序进行身份验证),那么SDK v4文档中的@Override
方法就开始起作用。
如TalMihr先前所述,您不应在中断情况下使用screen-sets
,而应使用resolver
接口。我现在正在处理该问题,一旦我得到了实际的解析器对象,便会更新我的答案。
仅供参考:我目前的设置(使用Gigya SDK v 4.0.1)可实现此目的:
//Facebook
implementation 'com.facebook.android:facebook-android-sdk:4.41.0'
//Google Sign In
implementation 'com.google.android.gms:play-services-auth:16.0.1'
其他方面与示例应用程序的代码相似。
编辑:
有效!我还没有使用resolver
界面来解决这个问题。有人告诉我尝试使屏幕设置正常工作,因为我们希望避免创建其他UI。它是如何工作的,在使用屏幕设置时,您需要提供其他参数。
待注册代码:
private void processGigyaLogin(String loginProvider) {
mGigya = Gigya.getInstance(MyAccount.class);
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("screenSet","SCREEN-SET-RegistrationLogin");
params.put("startScreen","gigya-complete-registration-screen");
mGigya.login(loginProvider, new HashMap<>(), new GigyaLoginCallback<MyAccount>() {
@Override
public void onSuccess(MyAccount obj) {
// Success
Log.i("GIGYA-CDC", "Logged in using" + obj.getSocialProviders() + " as: " + obj.getProfile().getFirstName() + " " + obj.getProfile().getLastName() + ", " + obj.getProfile().getEmail());
}
@Override
public void onConflictingAccounts(@NonNull GigyaApiResponse response, @NonNull ILinkAccountsResolver resolver) {
Log.d("GIGYA-CDC", "onConflictingAccounts");
}
@Override
public void onPendingRegistration(@NonNull GigyaApiResponse response, @NonNull IPendingRegistrationResolver resolver) {
Log.d("GIGYA-CDC", "onPendingRegistration");
params.put("regToken", response.getField("regToken", String.class));
mGigya.showScreenSet("SCREEN-SET-RegistrationLogin", false, params, new GigyaPluginCallback<MyAccount>() {
@Override
public void onLogin(@NonNull MyAccount obj) {
Log.i("GIGYA-CDC", "Logged in using" + obj.getSocialProviders() + " as: " + obj.getProfile().getFirstName() + " " + obj.getProfile().getLastName() + ", " + obj.getProfile().getEmail());
}
});
}
@Override
public void onError(GigyaError error) {
Log.e("GIGYA-CDC", error.getLocalizedMessage() + " Status Code: " + error.getStatusCode() + " Error Code: " + error.getErrorCode());
}
});
}
答案 1 :(得分:0)
如果您使用的是屏幕设置,则只需要在“注册完成”屏幕中添加所需的任何字段,然后当社交用户登录或注册时,系统会自动提示他们。注册完成屏幕可完成所有丢失的数据。
如果出于某种原因,您正在从社交用户中明确收集您从其他用户中收集的数据,而您没有从其他用户中收集数据,那么您将需要使用“ Visible When”标志来自定义注册完成屏幕您将需要检查用户注册的提供商,并将JS检查附加到“可见的时间”,然后在屏幕上添加“如果完成则关闭”选项,因此如果用户不是来自社交网络,则将绕过该选项
要根据您的错误进行其他检查,请确保移动屏幕设置注册完成屏幕包含所有 Required 架构字段(即“同意”),否则用户将无法完成注册。
ref:https://developers.gigya.com/display/GD/Screen-Sets#Screen-Sets-RegistrationFlow
答案 2 :(得分:0)
在覆盖“ onPendingRegistration”回调时,将为您提供“ IPendingRegistrationResolver”实例,可以帮助您解决此中断。 使用它来设置登录过程所需的其他相关字段。
如果您正在使用诸如“ mGigya.login(...)”调用之类的业务api,则解决故障是您的责任。提供的解析器模式仅用于此目的。 此方法不使用屏幕设置功能。</ strong>
请参阅: https://developers.gigya.com/display/GD/Android+SDK+v4#AndroidSDKv4-HandlingInterruptions 有关中断处理方式的更多信息。