微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用LoginManager登录Android Facebook SDK 4.0

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

问题是我没有得到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);

使用调试器,我能够看到这一行:
mLoginMgr.logInWithReadPermissions(mActivity,mPermissions);
执行,但没有触发任何回调.我在控制台中也没有错误,并且设备屏幕变黑并且没有任何反应.

我认为这不重要,但代码是在包装类(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" />

解决方法

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

去做:

>添加一行:

callbackManager.onActivityResult(requestCode,resultCode,data); in onActivityResult(,) in fragment.

>致电:

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

使用它,不要使用this.getActivity()

>当然,完成.

原文地址:https://www.jb51.cc/android/315859.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐