android - 在android中使用facebook登录时没有调用onActivityResult
问题描述
我已经集成了 Facebook 并在 Facebook 开发者帐户中创建了应用程序。我已经在 facebook 开发者帐户中注册了 FBHelper 活动,一旦我收到数据/facebook 详细信息,我就使用了 setResult 方法,但它没有调用 LoginActivity.java 的 onActivityResult() 方法。
代码:LoginAcitivity.java
Intent intent = new Intent(LoginActivity.this, FBHelper.class);
startActivityForResult(intent,2);
LoginActivity.java 的 onActivityResult()
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 2 && resultCode == RESULT_OK) {
String jsondata=data.getStringExtra("userProfile");
try {
JSONObject response = new JSONObject(jsondata);
String email = (response.get("email").toString());
String fname = (response.get("first_name").toString());
String lname = (response.get("last_name").toString());
String id = (response.get("id").toString());
Toast.makeText(loginActivity,"facebook", Toast.LENGTH_SHORT).show();
Social_Login(email, id, fname, lname, "facebook");
} catch(Exception e){
e.printStackTrace();
}
}
}
FBHelper.java
public class FBHelper extends AppCompatActivity {
CallbackManager callbackManager;
private CallbackManager mFacebookCallbackManager;
private Context myActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fb_helper);
try {
FacebookSdk.sdkInitialize(getApplicationContext());
AppEventsLogger.activateApp(this);
callbackManager = CallbackManager.Factory.create();
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
LoginManager.getInstance().logOut();
LoginManager.getInstance().logInWithReadPermissions(FBHelper.this, Arrays.asList("public_profile", "email"));
LoginManager.getInstance().setLoginBehavior(LoginBehavior.DEVICE_AUTH);
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
getUserDetails(loginResult);
}
@Override
public void onCancel() {
// App code
Log.v("onCancel", "onCancel");
}
@Override
public void onError(FacebookException exception) {
// App code
exception.printStackTrace();
Log.v("onError", "CANCEL");
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
callbackManager.onActivityResult(requestCode, resultCode, data);
} catch (Exception e) {
e.printStackTrace();
}
}
protected void getUserDetails(LoginResult loginResult) {
GraphRequest data_request = GraphRequest.newMeRequest(
AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject json_object, GraphResponse response) {
try {
Intent returnIntent = new Intent();
returnIntent.putExtra("userProfile", json_object.toString());
setResult(RESULT_OK, returnIntent);
// LoginManager.getInstance().logOut();
finish();
} catch (Exception e) {
e.printStackTrace();
}
}
});
try {
Bundle permission_param = new Bundle();
permission_param.putString("fields", "id,name,email,picture.width(120).height(120)");
data_request.setParameters(permission_param);
data_request.executeAsync();
} catch (Exception e) {
e.printStackTrace();
}
}
protected void onResume() {
super.onResume();
// Logs 'install' and 'app activate' App Events.
AppEventsLogger.activateApp(this);
}
@Override
protected void onPause() {
super.onPause();
// Logs 'app deactivate' App Event.
AppEventsLogger.deactivateApp(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//LoginManager.getInstance().logOut();
}
}
解决方案
最后我得到了解决方案,我从头开始使用另一个 Activity 并慢慢复制新的 Activity 直到它与正在破坏的那个匹配。简而言之,它与 Activity 无关,而与 Android Manifest 无关。
在我的 Android 清单中,我的 LoginActivity 上有 android:noHistory="true" 导致我的应用程序崩溃。一旦我删除它,它就会再次起作用。
<activity
android:name=".Activity.General.LoginActivity"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
推荐阅读
- google-apps-script - 我们如何使用 Google App Script 格式化电子邮件
- r - 将值分配给R中的覆盖?
- python - 如何合并两个字典
- javascript - 在输入中接受十进制值
- jquery - 如果应用了 css 过渡,为什么动画回调函数会立即触发?
- asp.net - 使用 IOT Hub Manager 获取 IOT 设备的当前 IP 地址或位置
- windows - 如何配置 TFS 2018 shell 扩展以使用正确的工作区?
- css - 电子邮件基础:未内联的 CSS 类
- python - 上传的文件在 Dropbox 中被覆盖
- r - 在 plot.xts 中调整 xaxis