使用LoginManager登录的Android Facebook SDK 4.0

夜间固定

我正在尝试将旧应用程序的登录代码从SDK 3.0迁移到SDK 4.0。我已经使用来实现了登录LoginManager,因为我有自定义的登录按钮。

问题是我没有收到来自Facebook API的响应。没有成功,没有错误,没有抛出任何异常。代码如下:

    //global refs
    //callbacks
    private CallbackManager mCallbackManager;
    private FacebookCallback<LoginResult> mFacebookCallback;

    private List<String> mPermissions = Arrays.asList("email");
    private LoginManager mLoginMgr;
    private Activity mActivity;

    //........

    //code is inside method
    FacebookSdk.sdkInitialize(getApplicationContext());

    //perhaps a bit excessive
    FacebookSdk.addLoggingBehavior(LoggingBehavior.GRAPH_API_DEBUG_INFO);
    FacebookSdk.addLoggingBehavior(LoggingBehavior.DEVELOPER_ERRORS);
    FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
    FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_RAW_RESPONSES);
    FacebookSdk.setApplicationId(mActivity.getString(R.string.sample_fb_id));

    //init callbacks
    mFacebookCallback = new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Log.v("LoginActivity login", loginResult.toString());
            GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {
                    // Application code
                    Log.v("LoginActivity", response.toString());
                    try {
                        String email = object.getString("email");
                        Log.v("LoginActivity", "obtained email: ", email);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            });
            request.executeAsync();
        }
        @Override
        public void onCancel() {
            Log.e("LoginActivity", "facebook login canceled");
        }

        @Override
        public void onError(FacebookException e) {
            Log.e("LoginActivity", "facebook login failed error");
        }
    };
    mCallbackManager = CallbackManager.Factory.create();
    mLoginMgr = LoginManager.getInstance();
    mLoginMgr.registerCallback(mCallbackManager, mFacebookCallback);
    mLoginMgr.logInWithReadPermissions(mActivity, mPermissions);

使用Debugger,我可以看到以下行:mLoginMgr.logInWithReadPermissions(mActivity, mPermissions);被执行,但是没有callbacks任何触发。我的控制台也没有错误,并且“设备”屏幕变黑了,什么也没发生。

我认为这无关紧要,但是代码是在包装类中执行的(在外部Activity)。我在内尝试过Activity,但没有区别。

有什么建议么?非常感激。

编辑:

这是在内部声明的AndroidManifest.xml

<activity android:name="com.facebook.FacebookActivity"
          android:theme="@android:style/Theme.Translucent.NoTitleBar"
          android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
          android:label="@string/app_name" />
FIT226557

如果您的代码在片段中,请不要将mActivity变量用作Activity上下文。

去做:

  1. 添加一行:

     callbackManager.onActivityResult(requestCode, resultCode, data); in onActivityResult(, , , ) in fragment.
    
  2. 呼叫:

     LoginManager.getInstance().logInWithReadPermissions(**this**, Arrays.asList("public_profile", "user_friends")); 
    

使用this,而不使用this.getActivity()

  1. 当然可以

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章