Android Facebook 登录:如何在 XML 中没有 LoginButton 的情况下使用 LoginManager 检查登录
Android Facebook Login : How to check login using LoginManager without having LoginButton in XML
我已经使用 LoginButton 在我的 android 应用程序中完成了 facebook 登录检查,但我想使用 LoginManager 进行检查。我怎样才能修改我的代码以那样工作?
LoginButton loginButton = (LoginButton) findViewById(R.id.fb_login_button);
loginButton.setReadPermissions("user_friends");
shareDialog = new ShareDialog(this);
//Login Callback registration
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(getApplicationContext(), "in LoginResult on success", Toast.LENGTH_LONG).show();
//Login success - process to Post
if (ShareDialog.canShow(ShareLinkContent.class)) {
String description = "description";
ShareLinkContent linkContent = new ShareLinkContent.Builder()
.setContentTitle("title")
.setContentDescription(description)
.setContentUrl(Uri.parse("http://google.com"))
.setImageUrl(Uri.parse("http://google.com"))
.build();
shareDialog.show(linkContent, ShareDialog.Mode.FEED);
}
}
@Override
public void onCancel() {
Toast.makeText(getApplicationContext(), "in LoginResult on cancel", Toast.LENGTH_LONG).show();
}
@Override
public void onError(FacebookException exception) {
Toast.makeText(getApplicationContext(), "in LoginResult on error", Toast.LENGTH_LONG).show();
}
});
如果用户在通过共享对话框打开之前未登录,我还想打开 Facebook 登录对话框。登录对话框应与共享对话框(在弹出窗口中)相同。怎么做?
谢谢!
您可以获得该用户配置文件,试试这个,
Profile dd = Profile.getCurrentProfile().getCurrentProfile();
if(dd != null)
{
//user has logged
}
else
{
//not logged
}
您可以在没有 LoginButton 的情况下重新启动登录,如下所示,
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList(<required permissions>));
还需要为上述请求实现回调
您可以检查用户是否登录,通过调用方法Loginmanger
.logInWithReadPermissions,手动启动登录过程,无需按钮。您可以在 onCreate
方法中执行此操作。如果用户登录,它会立即调用 onSuccess
回调方法,您可以在其中调用您的 shareDialog
。如果用户未登录,它将显示登录屏幕。如果成功(即用户登录),将调用 onSuccess
方法;
实际上,您可以从代码中删除所有 login button
项,并在末尾添加一行:
LoginManager.getInstance().logInWithReadPermissions(this, "user_friends"); //Log in to FB
您也可以使用 WritePermissions。您可以阅读有关所需权限的信息 here.
这是您的代码,但包装为登录方法,没有任何登录按钮实例。您可以在任何地方调用它,当您需要检查用户是否已登录时。
public void checkLogin() {
//Login Callback registration
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(getApplicationContext(), "in LoginResult on success", Toast.LENGTH_LONG).show();
//Login success - process to Post
if (ShareDialog.canShow(ShareLinkContent.class)) {
String description = "description";
ShareLinkContent linkContent = new ShareLinkContent.Builder()
.setContentTitle("title")
.setContentDescription(description)
.setContentUrl(Uri.parse("http://google.com"))
.setImageUrl(Uri.parse("http://google.com"))
.build();
shareDialog.show(linkContent, ShareDialog.Mode.FEED);
}
}
@Override
public void onCancel() {
Toast.makeText(getApplicationContext(), "in LoginResult on cancel", Toast.LENGTH_LONG).show();
}
@Override
public void onError(FacebookException exception) {
Toast.makeText(getApplicationContext(), "in LoginResult on error", Toast.LENGTH_LONG).show();
}
});
LoginManager.getInstance().logInWithReadPermissions(this, "user_friends"); //Log in to FB
}
您可以以类似的方式使用 ProfileTracker 来跟踪当前配置文件中的更改:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
profileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(
Profile oldProfile,
Profile currentProfile) {
// here if session exist
}
};
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onDestroy() {
super.onDestroy();
profileTracker.stopTracking();
}
来自这里的来源:https://developers.facebook.com/docs/facebook-login/android/v2.3#get_current
我已经使用 LoginButton 在我的 android 应用程序中完成了 facebook 登录检查,但我想使用 LoginManager 进行检查。我怎样才能修改我的代码以那样工作?
LoginButton loginButton = (LoginButton) findViewById(R.id.fb_login_button);
loginButton.setReadPermissions("user_friends");
shareDialog = new ShareDialog(this);
//Login Callback registration
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(getApplicationContext(), "in LoginResult on success", Toast.LENGTH_LONG).show();
//Login success - process to Post
if (ShareDialog.canShow(ShareLinkContent.class)) {
String description = "description";
ShareLinkContent linkContent = new ShareLinkContent.Builder()
.setContentTitle("title")
.setContentDescription(description)
.setContentUrl(Uri.parse("http://google.com"))
.setImageUrl(Uri.parse("http://google.com"))
.build();
shareDialog.show(linkContent, ShareDialog.Mode.FEED);
}
}
@Override
public void onCancel() {
Toast.makeText(getApplicationContext(), "in LoginResult on cancel", Toast.LENGTH_LONG).show();
}
@Override
public void onError(FacebookException exception) {
Toast.makeText(getApplicationContext(), "in LoginResult on error", Toast.LENGTH_LONG).show();
}
});
如果用户在通过共享对话框打开之前未登录,我还想打开 Facebook 登录对话框。登录对话框应与共享对话框(在弹出窗口中)相同。怎么做?
谢谢!
您可以获得该用户配置文件,试试这个,
Profile dd = Profile.getCurrentProfile().getCurrentProfile();
if(dd != null)
{
//user has logged
}
else
{
//not logged
}
您可以在没有 LoginButton 的情况下重新启动登录,如下所示,
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList(<required permissions>));
还需要为上述请求实现回调
您可以检查用户是否登录,通过调用方法Loginmanger
.logInWithReadPermissions,手动启动登录过程,无需按钮。您可以在 onCreate
方法中执行此操作。如果用户登录,它会立即调用 onSuccess
回调方法,您可以在其中调用您的 shareDialog
。如果用户未登录,它将显示登录屏幕。如果成功(即用户登录),将调用 onSuccess
方法;
实际上,您可以从代码中删除所有 login button
项,并在末尾添加一行:
LoginManager.getInstance().logInWithReadPermissions(this, "user_friends"); //Log in to FB
您也可以使用 WritePermissions。您可以阅读有关所需权限的信息 here.
这是您的代码,但包装为登录方法,没有任何登录按钮实例。您可以在任何地方调用它,当您需要检查用户是否已登录时。
public void checkLogin() {
//Login Callback registration
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(getApplicationContext(), "in LoginResult on success", Toast.LENGTH_LONG).show();
//Login success - process to Post
if (ShareDialog.canShow(ShareLinkContent.class)) {
String description = "description";
ShareLinkContent linkContent = new ShareLinkContent.Builder()
.setContentTitle("title")
.setContentDescription(description)
.setContentUrl(Uri.parse("http://google.com"))
.setImageUrl(Uri.parse("http://google.com"))
.build();
shareDialog.show(linkContent, ShareDialog.Mode.FEED);
}
}
@Override
public void onCancel() {
Toast.makeText(getApplicationContext(), "in LoginResult on cancel", Toast.LENGTH_LONG).show();
}
@Override
public void onError(FacebookException exception) {
Toast.makeText(getApplicationContext(), "in LoginResult on error", Toast.LENGTH_LONG).show();
}
});
LoginManager.getInstance().logInWithReadPermissions(this, "user_friends"); //Log in to FB
}
您可以以类似的方式使用 ProfileTracker 来跟踪当前配置文件中的更改:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
profileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(
Profile oldProfile,
Profile currentProfile) {
// here if session exist
}
};
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onDestroy() {
super.onDestroy();
profileTracker.stopTracking();
}
来自这里的来源:https://developers.facebook.com/docs/facebook-login/android/v2.3#get_current