Facebook Android登录无法正常运行

时间:2015-03-18 18:00:33

标签: android eclipse facebook facebook-login facebook-sdk-4.0

所以我的Facebook登录我的Android应用程序并不是应该如何工作。

基本上我点击LoginButton并转发登录。当我点击设备上的返回按钮并尝试单击登录按钮时,登录窗口不会再次显示。

不确定如何解决这个问题? 一定是我做错了吗?

Mainifest文件。

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="uk.ac.tees.parse_fbintergration_example1"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />
    <uses-permission android:name="android.permission.INTERNET" android:maxSdkVersion="21"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity android:name="com.facebook.LoginActivity"/>
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
    </application>
</manifest>

的strings.xml

<?xml version="1.0" encoding="utf-8"?>

<string name="app_name">Parse_FBIntergration_Example1</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="facebook_app_id">*FB_ID_HIDDEN*</string>

MainActivity.java

    public class MainActivity extends FragmentActivity
{

    private MainFragment frag;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if(savedInstanceState == null) {
            frag = new MainFragment();

            getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
        } else {
            frag = (MainFragment)getSupportFragmentManager().findFragmentById(android.R.id.content);
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}



 public class MainFragment extends Fragment {

    private LoginButton loginBtn;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.activity_main, container, false);



        loginBtn = (LoginButton)view.findViewById(R.id.login_button);
        loginBtn.setFragment(this);
        loginBtn.setReadPermissions(Arrays.asList("public_profile"));
        return view;
    }
}

2 个答案:

答案 0 :(得分:1)

您的Mainfest.xml文件是否正确。我假设您正在使用facebook sdk 4.0等。

您需要添加片段并为具有Facebook登录按钮的布局充气。

<com.facebook.login.widget.LoginButton
android:id="@+id/fb_login_button"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>

在你的片段中

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   FacebookSdk.sdkInitialize(getActivity().getApplicationContext());
   callbackManager = CallbackManager.Factory.create();
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
   super.onViewCreated(view, savedInstanceState);
   loginButton = (LoginButton) view.findViewById(R.id.login_button);
   loginButton.setReadPermissions("email", "user_likes", "user_friends");
   loginButton.setFragment(this);

   loginButton.registerCallback(callbackManager, new FacebookCallback < LoginResult > () {@Override
    public void onSuccess(LoginResult loginResult) {
        //Handle your success result here
    }

    @Override
    public void onCancel() {
        Toast.makeText(getActivity(), "fail", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onError(FacebookException exception) {
        Toast.makeText(getActivity(), "error", Toast.LENGTH_SHORT).show();
    }
 });

}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
   View view = inflater.inflate(R.layout.fragment_facebook_login, container, false);
   return view;
}



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

答案 1 :(得分:0)

      **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**