Android Facebook 登录无法使用空调用包调用 LoginFragment
Android Facebook Login Cannot call LoginFragment with a null calling package
我已将 Facebook 登录添加到我的应用程序。
我第一次能够毫无问题地登录。但是登录后我注销了。我在 logcat.
中收到此错误
E/LoginFragment: Cannot call LoginFragment with a null calling package. This can occur if the launchMode of the caller is singleInstance.
我搜索了一下google。通过将启动模式设置为标准来解决一些错误。我没有指定任何启动模式。但我仍然尝试
<activity
android:name=".activities.LoginActivity"
android:launchMode="standard"/>
但是没有成功。
这是我的登录程序。
1 添加了 FB 依赖 compile 'com.facebook.android:facebook-android-sdk:[4,5)'
2 我在Application
Class的onCreate()
super.onCreate()
之后初始化FB sdk。 AppEventsLogger.activateApp(this);
3 在我的登录中 activity 在 activity 的 onCreate()
上创建了 CallbackManager
实例。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
callbackManager = CallbackManager.Factory.create();
setContentView(R.layout.activity_login);
}
4 我使用自定义按钮登录。当我点击 fb 登录按钮时。我正在使用此代码。
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
//My Stuff Here
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,first_name,last_name,link,picture.type(large)");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
//Cancel Stuff
}
@Override
public void onError(FacebookException exception) {
exception.printStackTrace();
//Error Stuff
}
}); LoginManager.getInstance().logInWithReadPermissions((AppCompatActivity)context,
Arrays.asList("public_profile, email"));
5 我在 onActivityResult() 中注册了回调
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
6 为了注销我使用了 LoginManager.getInstance().logOut()
7 但我尝试使用我的自定义按钮再次登录,调试指针转到行 LoginManager.getInstance().registerCallback()
但方法 none (onSuccess(LoginResult loginResult)
, onError()
, onError(FacebookException exception)
) 的回调获取调用。我收到一条日志说 E/LoginFragment: Cannot call LoginFragment with a null calling package. This can occur if the launchMode of the caller is singleInstance.
改变这个
LoginManager.getInstance().logInWithReadPermissions((AppCompatActivity)context,
Arrays.asList("public_profile, email"));
到
LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this,
Arrays.asList("public_profile, email"));
首先,Facebook 并未在此处提供确切的异常详细信息。
Sushobh Nadiger 的回答帮助我解决了这个问题。
我想将 facebook 登录代码与我的 LoginActivity 和 return JSONObject 隔离回 LoginActivity,所以我创建了一个 class 来处理名为 SocialLogin.java 的社交登录,我注册了通过 LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() { //More Stuff here }
在 SocialLogin.java 中回调并调用 facebook 登录 LoginManager.getInstance().logInWithReadPermissions()
有关详细信息,请参阅相关的完整代码。
这才是真正的问题所在。所以我在 LoginActivity.java 中进行了这些调用(registerCallback() 和 logInWithReadPermissions())并且它起作用了。
但是我作为开发人员会认为像 facebook 这样的公司应该给我们正确的错误,而不是像我这样误导性的错误,这样我们宝贵的时间就不会浪费了。
我已将 Facebook 登录添加到我的应用程序。
我第一次能够毫无问题地登录。但是登录后我注销了。我在 logcat.
中收到此错误E/LoginFragment: Cannot call LoginFragment with a null calling package. This can occur if the launchMode of the caller is singleInstance.
我搜索了一下google。通过将启动模式设置为标准来解决一些错误。我没有指定任何启动模式。但我仍然尝试
<activity
android:name=".activities.LoginActivity"
android:launchMode="standard"/>
但是没有成功。
这是我的登录程序。
1 添加了 FB 依赖 compile 'com.facebook.android:facebook-android-sdk:[4,5)'
2 我在Application
Class的onCreate()
super.onCreate()
之后初始化FB sdk。 AppEventsLogger.activateApp(this);
3 在我的登录中 activity 在 activity 的 onCreate()
上创建了 CallbackManager
实例。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
callbackManager = CallbackManager.Factory.create();
setContentView(R.layout.activity_login);
}
4 我使用自定义按钮登录。当我点击 fb 登录按钮时。我正在使用此代码。
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
//My Stuff Here
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,first_name,last_name,link,picture.type(large)");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
//Cancel Stuff
}
@Override
public void onError(FacebookException exception) {
exception.printStackTrace();
//Error Stuff
}
}); LoginManager.getInstance().logInWithReadPermissions((AppCompatActivity)context,
Arrays.asList("public_profile, email"));
5 我在 onActivityResult() 中注册了回调
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
6 为了注销我使用了 LoginManager.getInstance().logOut()
7 但我尝试使用我的自定义按钮再次登录,调试指针转到行 LoginManager.getInstance().registerCallback()
但方法 none (onSuccess(LoginResult loginResult)
, onError()
, onError(FacebookException exception)
) 的回调获取调用。我收到一条日志说 E/LoginFragment: Cannot call LoginFragment with a null calling package. This can occur if the launchMode of the caller is singleInstance.
改变这个
LoginManager.getInstance().logInWithReadPermissions((AppCompatActivity)context,
Arrays.asList("public_profile, email"));
到
LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this,
Arrays.asList("public_profile, email"));
首先,Facebook 并未在此处提供确切的异常详细信息。
Sushobh Nadiger 的回答帮助我解决了这个问题。
我想将 facebook 登录代码与我的 LoginActivity 和 return JSONObject 隔离回 LoginActivity,所以我创建了一个 class 来处理名为 SocialLogin.java 的社交登录,我注册了通过 LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() { //More Stuff here }
在 SocialLogin.java 中回调并调用 facebook 登录 LoginManager.getInstance().logInWithReadPermissions()
有关详细信息,请参阅相关的完整代码。
这才是真正的问题所在。所以我在 LoginActivity.java 中进行了这些调用(registerCallback() 和 logInWithReadPermissions())并且它起作用了。
但是我作为开发人员会认为像 facebook 这样的公司应该给我们正确的错误,而不是像我这样误导性的错误,这样我们宝贵的时间就不会浪费了。