java - Facebook RegisterCallback 无法正常工作
问题描述
我正在制作一个名为“BrandShopping”的应用程序。该应用程序旨在用于在线交付和购物。这就是为什么我需要不同的登录方法,以便用户可以选择他们觉得最舒服的方式。
我遇到的问题是我的 Facebook 登录。我不太明白我做错了什么。我主要在RegisterCallback()
功能上遇到问题。
问题是应用程序被指定为RegisterCallback()
使用登录按钮(在本例中为RegisterWithFacebookBtn
)。在该OnSuccess()
方法中,我指定应用程序调用一个名为的方法,该方法FetchUserData()
应该从 Facebook 数据库中读取用户的信息。稍后在该方法中,我让应用程序检查用户是否已登录。如果这是true
:(goto AccountinfoActivity
另一个活动)但它永远不会。
我已尝试调试该应用程序,但我无法理解该程序有什么问题。如果成功,我确实有一个应该显示的祝酒词,registerCallback()
但它不显示祝酒词。
我的代码如下:
public class LoginOrSignupActivity extends AppCompatActivity {
private Button LoginBtn, RegisterWithEmailBtn, RegisterWithGoogleBtn;
private String Tag;
private ProgressDialog LoadingBar;
private LoginButton RegisterWithFacebookBtn;
private FirebaseDatabase firebasedatabase =
FirebaseDatabase.getInstance();
private DatabaseReference database = firebasedatabase.getReference();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_or_signup);
LoadinGUI(); //LOAD IN THE GRAPHICAL USER INTERFACE
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
LoginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(LoginOrSignupActivity.this, LogInActivity.class));
}
});
RegisterWithEmailBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(LoginOrSignupActivity.this, RegisterActivity.class));
}
});
RegisterWithFacebookBtn.setOnClickListener(new View.OnClickListener() { //REGISTRATION WITH FACEBOOK
@Override
public void onClick(View view) {
SignInWithFacebook();
}
});
}
private void SignInWithFacebook(){ //FOR FACEBOOK LOGIN
CallbackManager callbackManager = CallbackManager.Factory.create();
RegisterWithFacebookBtn.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(LoginOrSignupActivity.this, "Part one succeded", Toast.LENGTH_SHORT).show();
AccessToken accessToken = loginResult.getAccessToken();
FetchUserData(accessToken);
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
}
});
}
// FOR FACEBOOK LOGIN, ALSO SAVES TO THE FIREBASE DATABSE
private void FetchUserData(final AccessToken accessToken){
GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object, GraphResponse response
) {
try {
String name = object.getString("name");
String email = object.getString("email");
// ADD MORE HERE
/* WHEN EVERYTHING IS DONE AND SUCCEEDS,
* GOTO ACCOUNTINFOACTIVITY ACTIVITY; MAY NEED TO BE
* MODIFIED LATER ON
*/
if(accessToken != null) {
startActivity(new Intent(LoginOrSignupActivity.this, AccountInfoActivity.class));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fileds", "id,name,emai");
}
任何和所有的帮助将不胜感激
解决方案
你在你的活动中添加了这个吗?
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
推荐阅读
- swift - 如何将字典从 viewController 传递到 DetailViewController?
- swift - 覆盖特定类型的可解码
- angular5 - 按钮单击时传递多个复选框值
- javascript - 如何存储和打印 document.getElementsByClassName 中的元素?
- torch - KMNIST: RuntimeError: 形状 [1, 28, 28] 的输出与广播形状 [3, 28, 28] 不匹配
- python-3.x - matplotlib 中的 imhsow 与 opencv 显示的不同
- reactjs - 如何摆脱 AceEditor 组件中出现的垂直线?
- reactjs - 更新嵌套对象时 UseState 不重新渲染
- haskell - 无法观察并行 Haskell 代码的加速,但分析表明并非如此
- netty - 启动netty服务器时如何连接到其他netty服务器?