在Android应用中使用Facebook登录

3

你有按照链接中提到的指示进行操作吗?应该很清楚了。 - Musa
2个回答

12

第一步

您是否已经注册了应用程序?如果没有,请前往https://developers.facebook.com/apps/,点击右上角的添加新应用程序并按照说明操作。

第二步

第二步是将Facebook SDK添加到您的项目中。您可以按照https://developers.facebook.com/docs/android/getting-started中的说明进行操作

  • 在Android Studio中,使用API 15作为最低SDK创建新项目

  • Facebook SDK可在Maven Central上找到,因此在dependencies之前添加repositories { mavenCentral() }到您的build.gradle

  • 然后,在dependencies中添加compile 'com.facebook.android:facebook-android-sdk:4.7.0'

  • 构建您的项目并将Facebook SDK初始化到您的应用程序中

代码如下:

import com.facebook.FacebookSdk;

@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     FacebookSdk.sdkInitialize(getApplicationContext());
}

第三步

注册应用程序时收到的Facebook应用程序ID应该添加到你的strings.xml文件中。

<string name="facebook_app_id">123456908761030</string>

你需要编辑你的AndroidManifest.xml文件,添加一个INTERNET权限uses-permission(以便连接到Facebook的服务器)和一个meta-data元素到Application元素中(用于Facebook应用ID)。

<uses-permission android:name="android.permission.INTERNET"/>

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

第四步

在您的清单文件中,将FacebookActivity 定义为另一个 Activity。它使用configChanges 自己处理大部分配置更改。

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

步骤五

在 XML 布局中创建/添加登录按钮(放置在任何您想要的位置)。

<com.facebook.login.widget.LoginButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

第六步

在你的Activity中,将你在布局中定义的小部件声明为该类的字段。

private LoginButton loginButton;

声明一个CallbackManager作为另一个字段来管理应用程序中使用的回调。

private CallbackManager callbackManager;

初始化您的CallbackManager实例。

callbackManager = CallbackManager.Factory.create();

使用 findViewById 初始化小部件。

loginButton = (LoginButton) view.findViewById(R.id.usersettings_fragment_login_button);

最后一步

创建一个回调函数来处理登录结果:

  • 如果登录尝试成功,将调用onSuccess

  • 如果用户取消了登录尝试,则调用onCancel

  • 如果发生错误,则调用onError

代码如下:

loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        // App code
    }

    @Override
    public void onCancel() {
        // App code
    }

    @Override
    public void onError(FacebookException e) {
        // App code
    }
});

然后,在onActivityResult()方法中:

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

一些链接

Tutorial TutsPlus: 链接

应用示例(slidenerd):链接

视频教程(slidenerd):链接

获取已登录用户信息:链接


谢谢兄弟。回复晚了,抱歉。 :) - Kyizin
欢迎您。 如果答案有帮助,请点击“上箭头”按钮。 - eldivino87
伟大的一步。 :) :) - Huy Tower

1
            **Process Login With Facebook**
        **Working on Play Store** 

    **Link 

 - https://play.google.com/store/apps/details?id=com.codecube.airbucks&hl=en

**



            Registered your new app? If you didn't, go to https://developers.facebook.com/apps/, click Add a New App in the top right and follow the instructions. **step by step**

            **Manifest Permission**
            <uses-permission android:name="android.permission.INTERNET" />
                <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
                <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

            **build.Gradle Dependency**
            compile 'com.facebook.android:facebook-android-sdk:4.8.0'  // in airbuck

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


             <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" />
                    <meta-data android:name="com.facebook.sdk.ApplicationName"
                        android:value="@string/app_name" />
                    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>

                    <provider android:authorities="com.facebook.app.FacebookContentProvider1854328631556764"
                        android:name="com.facebook.FacebookContentProvider"
                        android:exported="true"/> 

        **Layout Xml Code**
        <com.facebook.login.widget.LoginButton
                android:id="@+id/login_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                />

        **Put own generate facebook Key in String.xml File** 
        <string name="facebook_app_id">1854328631556764</string>
            <string name="fb_login_protocol_scheme">fb1854328631556764</string>

            **MainActivity CODE**
             protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main1);
                    FacebookSdk.sdkInitialize(this.getApplicationContext());
                    AppEventsLogger.activateApp(this);   

                    callbackManager = CallbackManager.Factory.create();
                    fbloginButton = (LinearLayout) findViewById(R.id.facebook_button);


                    fbloginButton.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                                    int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this,
                                            android.Manifest.permission.CAMERA);
                                    if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
                                        //showing dialog to select image
                                        callFacebook();
                                        Log.e("permission", "granted");
                                    } else {
                                        ActivityCompat.requestPermissions(MainActivity.this,
                                                new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE,
                                                        android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.CAMERA}, 1);
                                    }
                                } else {
                                    callFacebook();
                                }
                        }
                    });
                }

             **CAllOnFAcebook**
                public void callFacebook() {

                    callbackManager = CallbackManager.Factory.create();

            //        LoginManager.getInstance().logInWithReadPermissions(MainActivity2.this, Arrays.asList("email"));

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

                    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {

                        @Override
                        public void onSuccess(LoginResult loginResult) {
                            Log.e("keshav","onSuccess called ");
                            GraphRequest request = GraphRequest.newMeRequest(
                                    loginResult.getAccessToken(),
                                    new GraphRequest.GraphJSONObjectCallback() {
                                        @Override
                                        public void onCompleted(
                                                JSONObject object,
                                                GraphResponse response) {
                                            // Application code
                                            Log.v("LoginActivityfacebook", response.toString());

                                            try {
                                                JSONObject data = response.getJSONObject();
                                                facebookName = data.getString("name");
                                                facebookEmail = data.getString("email");
                                                facebookId = data.getString("id");
                                                facebookLink = data.getString("link");
                                                facebookLink = facebookLink.replace("https://www.facebook.com/app_scoped_user_id/", "");
                                                facebookLink = facebookLink.replace("/", "");
                                                Log.e("profilelink", "" + facebookLink);
                                                facebookLink = "https://graph.facebook.com/" + facebookLink + "/picture";

                                                Log.e("facebookName", "is  ->  " + facebookName);
                                                Log.e("facebookEmail", "is  ->  " + facebookEmail);
                                                Log.e("facebookId", "is  ->  " + facebookId);
                                                Log.e("facebookLink", "is  ->  " + facebookLink);


                                                    Log.e("Keshav","Suceesfully Login "+facebookName);



                                                } else {
                                                    CommonMethod.showAlert("Intenet Connectivity Failure", MainActivity.this);
                                                }
                                            } catch (JSONException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                            }
                                        }
                                    });
                            Bundle parameters = new Bundle();
                            parameters.putString("fields", "id,name,email,gender, birthday,link");
                            request.setParameters(parameters);
                            request.executeAsync();
                        }

                        @Override
                        public void onCancel() {
                            // App code
                            Log.i(TAG, "cancelTriggered");
                        }

                        @Override
                        public void onError(FacebookException exception) {
                            // App code
                            Log.i(TAG, "errorTriggered");
                        }
                    });
                    LoginManager.getInstance().logOut();                //  TODO Add Me Using this previous facebook login id password logout
                }


            **Process Login With Facebook**
        **Working on Play Store** 

    **Link https://play.google.com/store/apps/details?id=com.codecube.airbucks&hl=en**

处理Facebook登录流程 允许使用MarshMallow权限在PlayStore上工作链接 https://play.google.com/store/apps/details?id=com.codecube.airbucks&hl=en - Keshav Gera
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } - Keshav Gera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接