我正在浏览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);
}
});
}
}
答案 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)
试试这个:
在您的活动中:确保您
在facebook sdk
accessTokenTracker
和onCreate()
在login Button
中授予权限并注册回调。
在onSuccess()
方法中启动新活动
最后覆盖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);
}
}
:
<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 ...