Facebook android登录 [英] Facebook android login

查看:1132
本文介绍了Facebook android登录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在下面的代码中,我正在使用提供chrome自定义标签功能的Facebook,
facebook登录屏幕正在打开Chrome(如果有Chrome浏览器的设备)或简单的webview,还有在Facebook应用程序(如果设备有应用程序)但是在授予一般权限graphapi后即使在异步调用之后也不提供任何数据,我没有得到我在做错什么,请尽可能帮助

In below code i am using facebook provided chrome custom tab feature, facebook login screen is opening in both chrome (if device having chrome browser) or else simple webview and also in facebook app (if device having app) but after granting the general permission graphapi not providing any data even after async call i'm not getting what i am doing wrong in this please help if possible

附加信息: 这是在一个片段中调用,facebook登录屏幕全部打开,只是回调不起作用,直到现在我无法找到解决方案,只得到未回答的问题,是他们的任何方式,我们可以联系Facebook关于这个。

毕业生依赖

    compile 'com.facebook.android:facebook-android-sdk:[4,5)'

android清单代码

android manifest code

    <meta-data android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id"/>

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

    <activity
        android:name="com.facebook.CustomTabActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="@string/fb_login_protocol_scheme" />
        </intent-filter>
    </activity>

登录代码

facebook_sign.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mCallbackManager = CallbackManager.Factory.create();
            LoginManager.getInstance().logInWithReadPermissions(getActivity(), App_Contants.PERMISSIONS);
            LoginManager.getInstance().registerCallback(mCallbackManager, 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) {
                            try {
                                final String id = object.getString("id");
                                final String name = object.getString("name");
                                final String email = object.getString("email");
                                final String gender = object.getString("gender");
                                final String picture = object.getJSONObject("picture").getJSONObject("data").getString("url");
                                final String data = id + ", " + name + ", " + email + ", " + gender + ", "+ ", " + picture;
                                Log.e("my_data", response.getRawResponse());
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    });
                    Bundle parameters = new Bundle();
                    parameters.putString("fields", "id,name,email,gender,picture.width(400).height(400)");
                    request.setParameters(parameters);
                    request.executeAsync();
                }

                @Override
                public void onCancel() {
                    Toast.makeText(mContext,"Facebook Login Cancel",Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onError(FacebookException error) {
                    error.printStackTrace();
                }
            });
        }
    });


@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == Activity.RESULT_OK) {
        mCallbackManager.onActivityResult(requestCode, resultCode, data);
    }

    // Result returned from launching the Intent from
    //   GoogleSignInApi.getSignInIntent(...);
    if (requestCode == 1) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
            GoogleSignInAccount acct = result.getSignInAccount();
            // Get account information
            Log.e("data",acct.getEmail());

            mGoogleApiClient.stopAutoManage(getActivity());
            mGoogleApiClient.disconnect();
        }else if(result.getStatus().isCanceled()){
            mGoogleApiClient.stopAutoManage(getActivity());
            mGoogleApiClient.disconnect();
        }else if(result.getStatus().isInterrupted()){
            mGoogleApiClient.stopAutoManage(getActivity());
            mGoogleApiClient.disconnect();
        }else{
            mGoogleApiClient.stopAutoManage(getActivity());
            mGoogleApiClient.disconnect();
        }
    }
}


推荐答案

最后找到解决方案。那么当你这样做的时候你必须做出

Finally found the solution. Well when you are doing this in fragment you have to make

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    fragment.onActivityResult(requestCode,resultCode,data);
}

在活动中也作为这个sdk触发器,在活动中你必须通过它到你的片段(用你的loginfragment替换片段)

in activity also as this sdk trigger that in activity from their you have to pass it to your fragment (replace fragment with your loginfragment)

这篇关于Facebook android登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆