簡體   English   中英

在Android App中登錄Facebook SDK

[英]Log in Facebook SDK in Android App

大家好,謝謝!

我想在我的Android應用程序中使用Facebook登錄。

我已經為此工作了很長時間,但找不到問題所在。 我所發現的是,當它嘗試運行“ uiHelper.onCreate(savedInstanceState);”行時,它崩潰了。 我正在使用facebook sdk,如果您需要更多信息,請告訴我。

那就是我嘗試過的代碼:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.facebook.widget.LoginButton.UserInfoChangedCallback;

import java.util.Arrays;
import java.util.List;



 public class Login extends FragmentActivity
    {
    private LoginButton FBLoginBtn;
    private UiLifecycleHelper uiHelper;

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

        FBLoginBtn = (LoginButton) findViewById(R.id.FBLoginButton);
        uiHelper = new UiLifecycleHelper(this, statusCallback);


//Next step is where the app breaks down *****************/
        uiHelper.onCreate(savedInstanceState);


        FBLoginBtn.setUserInfoChangedCallback(new UserInfoChangedCallback()
        {
            @Override
            public void onUserInfoFetched(GraphUser user)
            {
                if(user != null)
                {
                    Log.d("FacebookLogIn", "Logged Successfully");
                }
                else
                {
                    Toast.makeText(getApplicationContext(), "Not able to connect with Facebook", Toast.LENGTH_LONG).show();
                }
            }
        });  
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.login, 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);
    }

    private Session.StatusCallback statusCallback = new Session.StatusCallback() {
        @Override
        public void call(Session session, SessionState state, Exception exception)
        {
            if (state.isOpened())
            {
                Log.d("FacebookSampleActivity", "Facebook session opened");
            }
            else if (state.isClosed())
            {
                Log.d("FacebookSampleActivity", "Facebook session closed");
            }
        }
    };

    @Override
    public void onResume() {
        super.onResume();
        uiHelper.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        uiHelper.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        uiHelper.onDestroy();
    }

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

    @Override
    public void onSaveInstanceState(Bundle savedState) {
        super.onSaveInstanceState(savedState);
        uiHelper.onSaveInstanceState(savedState);
    }

}

如果您能給我一些解決方法,我將不勝感激! ;)非常感謝您!!

使用https://github.com/sromku/android-simple-facebook 這是非常容易使用。

宜蘭

嘗試不使用UiLifecycleHelper 以下代碼可能會對您有所幫助。 我本人將其用於在我的應用程序中使用Facebook登錄,並且工作正常。

package com.example.integration;

import java.util.Arrays;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;

public class MainActivity extends Activity {

    private LoginButton fbLoginBtn;

    private SharedPreferences mPrefs;

    private Session.StatusCallback callback = new Session.StatusCallback() {
        @Override
        public void call(final Session session, final SessionState state, final Exception exception) {
            onSessionStateChange(session, state, exception);
        }
    };

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

        fbLoginBtn = (LoginButton) findViewById(R.id.fb_login_button);
        fbLoginBtn.setReadPermissions(Arrays.asList("email"));

        mPrefs = getPreferences(MODE_PRIVATE);

    }

    @Override
    public void onResume() {
        super.onResume();
        Session session = Session.getActiveSession();
        if (session != null &&
                (session.isOpened() || session.isClosed()) ) {
            onSessionStateChange(session, session.getState(), null);
        }

    }

    private void onSessionStateChange(final Session session, SessionState state, Exception exception) {

        if (state.isOpened()) {
            Editor edit = mPrefs.edit();
            edit.putString("access_token", session.getAccessToken());
            edit.putString("expires", session.getExpirationDate() + "");
            edit.commit();
            Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
                @Override
                public void onCompleted(GraphUser user, Response response) {

                    if (user != null) {
                        String firstName = user.getFirstName();
                        String lastName = user.getLastName();
                        String id = user.getId();
                        String email = (String) user.asMap().get("email");

                        Log.i("facebookid", id);
                        Log.i("firstName", firstName);
                        Log.i("lastName", lastName);
                        Log.i("AccessToken", session.getAccessToken());
                        Log.i("Email", email);

                        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                        intent.putExtra("name", firstName);
                        startActivity(intent);
                    }
                }

            });

        } 

        else if (state.isClosed()) {
            Toast.makeText(this, "Please Login", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Session.getActiveSession().onActivityResult(MainActivity.this, requestCode, resultCode, data);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM