2017-10-06 103 views
0

我已将Facebook登录添加到我的应用程序。Android Facebook登录无法使用空调用程序包调用LoginFragment

第一次我能够登录没有任何问题。但登录后,然后我注销。我在logcat中出现这个错误。

E/LoginFragment: Cannot call LoginFragment with a null calling package. This can occur if the launchMode of the caller is singleInstance. 

我在谷歌搜索了一下。通过将launchmode设置为标准来解决一些错误。我没有指定任何启动模式。但我仍然试着用

<activity 
    android:name=".activities.LoginActivity" 
    android:launchMode="standard"/> 

但没有成功。

这是我的程序登录。

1加FB依赖compile 'com.facebook.android:facebook-android-sdk:[4,5)'

2我初始化FB SDK中Application类的onCreate()super.onCreate()后。 AppEventsLogger.activateApp(this);

3在我的登录活动中创建CallbackManager实例onCreate()的活动。

@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()行,但回调的方法(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.

回答

1

改变了这一切

LoginManager.getInstance().logInWithReadPermissions((AppCompatActivity)context, Arrays.asList("public_profile, email"));

LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this, Arrays.asList("public_profile, email"));

+0

谢谢,你的回答帮我解决了这个问题。请参阅下面的答案。 –

+0

如果有帮助,请接受我的回答。 –

0

首先,Facebook正在这里不给确切的异常细节。

Sushobh Nadiger的答案帮我解决了这个问题。

我想从我的LoginActivity中隔离Facebook登录代码并将JSONObject返回给LoginActivity,因此我创建了一个处理Social Login的类,名为SocialLogin.java,并通过LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { //More Stuff here }在SocialLogin.java中注册了该回调,并将login facebook LoginManager.getInstance().logInWithReadPermissions()有关更多详细信息,请参阅相关代码。

这是实际的问题。所以我在我的LoginActivity.java中调用了这些调用(registerCallback()和logInWithReadPermissions()),并且它工作正常。

但是我作为开发人员会认为像Facebook这样的公司应该给我们适当的错误,而不是像我这样的误导性错误,这样我们宝贵的时间不会被浪费。