登录Facebook SDK后如何开启新活动

时间:2017-04-10 05:57:05

标签: java android facebook

我正在浏览Facebook Android SDK(https://developers.facebook.com/docs/facebook-login/android)并且发现很难理解。我只想在(成功)登录后打开一个新活动,虽然这些步骤显示了很多其他代码,但我不确定我需要哪些代码。这是我的代码:

activity_main.xml中

<com.facebook.login.widget.LoginButton
    android:id="@+id/fb_login_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    tools:layout_editor_absoluteY="496dp" />

MainActivity.java

public class MainActivity extends AppCompatActivity {

    Button or_email;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        or_email = (Button)findViewById(R.id.or_email);

        or_email.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(MainActivity.this, Register.class);
                MainActivity.this.startActivity(i);
            }

        });

    }

}

Register.java(空白activity_register.xml)

public class Register extends AppCompatActivity {

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

}

基本上,我只想在成功登录后打开activity_register.xml。所以我想我会在onSuccess()方法下添加一个新的Intent。但是我不确定我应该把这个代码放在哪里,以及它是否需要先前的代码块(FragmentActivity)才能工作。因此,如果有人能够向我解释这三个代码块中的每一个是如何工作的。那太好了。

ps:我已经注册了我的应用程序ID以及按钮正在运行的所有内容,我只是希望它在登录后打开一个新活动。现在它只是在登录后返回到activity_main

修改:以下代码无法打开activity_register,它只会返回activity_main

public class MainActivity extends AppCompatActivity {

    Button or_email;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        FacebookSdk.sdkInitialize(getApplicationContext());
        CallbackManager  mFacebookCallbackManager = CallbackManager.Factory.create();


        setContentView(R.layout.activity_main);

        LoginButton mFacebookSignInButton = (LoginButton)findViewById(R.id.fb_login_btn);
        mFacebookSignInButton.registerCallback(mFacebookCallbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(final LoginResult loginResult) {
                        //TODO: Use the Profile class to get information about the current user.
                        Intent intent = new Intent(MainActivity.this, Register.class);
                        startActivity(intent);
                    }

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

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



        or_email = (Button)findViewById(R.id.or_email);

        or_email.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(MainActivity.this, Register.class);
                MainActivity.this.startActivity(i);
            }


        });

    }


}

2 个答案:

答案 0 :(得分:0)

  

在onCreate()方法

中添加此代码
FacebookSdk.sdkInitialize(getApplicationContext());
    CallbackManager  mFacebookCallbackManager = CallbackManager.Factory.create();


    setContentView(R.layout.activity_main);

    LoginButton mFacebookSignInButton = (LoginButton)findViewById(R.id.fb_login_btn);
    mFacebookSignInButton.registerCallback(mFacebookCallbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(final LoginResult loginResult) {
                    //TODO: Use the Profile class to get information about the current user.
                    Intent intent = new Intent(MainActivity.this, Register.class);
                    startActivity(intent);
                }

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

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

答案 1 :(得分:0)

试试这个:

在您的活动中:确保您

  1. facebook sdk

  2. 中宣传accessTokenTrackeronCreate()
  3. login Button中授予权限并注册回调。

  4. onSuccess()方法中启动新活动

  5. 最后覆盖onActivityResult()方法并添加带有请求代码的callbackManger.onActivityResult()

    公共类MainActivity扩展了AppCompatActivity {

    Button or_email;
    CallbackManager  mFacebookCallbackManager;
    private AccessTokenTracker accessTokenTracker;
    private ProfileTracker mProfileTracker;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        setContentView(R.layout.activity_main);
    
        mFacebookCallbackManager = CallbackManager.Factory.create();
        accessTokenTracker = new AccessTokenTracker() {
            @Override
            protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) {
    
            }
        };
        accessTokenTracker.startTracking();
    
        LoginButton mFacebookSignInButton = (LoginButton)findViewById(R.id.fb_login_btn);
        mFacebookSignInButton.setReadPermissions(Arrays.asList(
                "public_profile", "email", "user_birthday", "user_friends"));
        mFacebookSignInButton.registerCallback(mFacebookCallbackManager, callback);
    
        or_email = (Button)findViewById(R.id.or_email);
    
        or_email.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(MainActivity.this, Register.class);
                MainActivity.this.startActivity(i);
            }
    
    
        });
    
    }
    
     private FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() {
    
        @Override
        public void onSuccess(LoginResult loginResult) {
            try {
                if (Profile.getCurrentProfile() == null) {
                    mProfileTracker = new ProfileTracker() {
                        @Override
                        protected void onCurrentProfileChanged(Profile profile_old, Profile profile_new) {
                            profile = profile_new;
                            Log.v("facebook - profile", profile_new.getFirstName());
                            mProfileTracker.stopTracking();
                        }
                    };
                    mProfileTracker.startTracking();
                } else {
                    profile = Profile.getCurrentProfile();
                    Log.v("facebook - profile", profile.getFirstName());
                }
                Intent intent = new Intent(getApplicationContext(), Register.class);
                startActivity(intent);
                finish();
            } catch (Exception e) {
                Log.d("ERROR", e.toString());
            }
        }
    
        @Override
        public void onCancel() {
            Toast.makeText(getApplicationContext(), "Cancelled", Toast.LENGTH_LONG).show();
        }
    
        @Override
        public void onError(FacebookException e) {
            Log.d("FACEBOOK ERRROR", e.toString());
            Toast.makeText(getApplicationContext(), "Something went wrong!! Please try again", Toast.LENGTH_LONG).show();
        }
    };
    
    
     @Override
    protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
        super.onActivityResult(requestCode, responseCode, intent);
        mFacebookCallbackManager.onActivityResult(requestCode, responseCode, intent);
    }
    

    }

  6. 清单中的

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

    确保在清单中添加app_id ...