Android 如何检查用户是否从Facebook注销或令牌是否过期
我在MainActivity OnCreate方法中调用了一个片段。在这个片段中,我要求用户登录facebook。我的代码是这样的:Android 如何检查用户是否从Facebook注销或令牌是否过期,android,facebook,android-fragments,facebook-sdk-4.0,Android,Facebook,Android Fragments,Facebook Sdk 4.0,我在MainActivity OnCreate方法中调用了一个片段。在这个片段中,我要求用户登录facebook。我的代码是这样的: public class FbLogin extends Fragment { private AccessToken accessToken; private Profile profile; private ProfileTracker profileTracker; static Access
public class FbLogin extends Fragment {
private AccessToken accessToken;
private Profile profile;
private ProfileTracker profileTracker;
static AccessTokenTracker tracker;
private ProfilePictureView profilepic;
LoginButton loginButton;
LoginPrefrence loginPrefrence ;
private CallbackManager mcallbackManager;
private FacebookCallback<LoginResult> mcallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
accessToken = loginResult.getAccessToken();
profile = Profile.getCurrentProfile();
getFbData(profile);
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse graphResponse) {
Log.d("Amc", graphResponse.toString());
try {
String id = object.getString("id");
String name = object.getString("name");
// String email = object.getString("email");
String gender = object.getString("gender");
profilepic.setProfileId(object.getString("id"));
//if want to make it round
/*
profileImageView = ((ImageView)faceBookProfilePictureView.getChildAt(0));
bitmap = ((BitmapDrawable)profileImageView.getDrawable()).getBitmap();
circular.setImageBitmap(bitmap);
profilepic.getChildAt(0);
*/
// String birthday = object.getString("birthday");
// String Uri1 =(object.getJSONObject("picture").getJSONObject("data").getString("url"));
Log.d("Amc2",""+id + ", " + name + ", " +""+ ""+ ", " + gender + ", " );
} catch (JSONException e) {
e.printStackTrace();
Log.d("Amc2",""+e.toString());
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender, birthday");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
}
};
public FbLogin() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getActivity().getApplicationContext());
mcallbackManager = CallbackManager.Factory.create();
tracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) {
}
};
profileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) {
getFbData(newProfile);
}
};
tracker.startTracking();
profileTracker.startTracking();
}
@Override
public void onStop() {
super.onStop();
tracker.stopTracking();
profileTracker.stopTracking();
}
@Override
public void onPause() {
super.onPause();
profileTracker.stopTracking();
tracker.stopTracking();
}
@Override
public void onDestroy() {
super.onDestroy();
tracker.stopTracking();
profileTracker.stopTracking();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_fb_login, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
profilepic = (ProfilePictureView)view.findViewById(R.id.pf_view);
loginPrefrence = new LoginPrefrence(getActivity());
loginButton = (LoginButton) view.findViewById(R.id.login_button);
loginButton.setReadPermissions(Arrays.asList("public_profile","email","user_birthday"));
loginButton.setFragment(this);
loginButton.registerCallback(mcallbackManager, mcallback);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mcallbackManager.onActivityResult(requestCode, resultCode, data);
}
public void getFbData(Profile prof) {
if (prof != null) {
Log.d("Facebook", prof.getFirstName());
Log.d("Facebook", prof.getName());
Log.d("Facebook", prof.getId().toString());
}
}
}
公共类FbLogin扩展片段{
专用AccessToken AccessToken;
个人资料;
个人档案跟踪器;
静态跟踪;
私人档案图片查看档案图片;
登录按钮登录按钮;
登录体验登录体验;
私有CallbackManager-mcallbackManager;
private FacebookCallback mcallback=新建FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
accessToken=loginResult.getAccessToken();
profile=profile.getCurrentProfile();
getFbData(profile);
GraphRequest请求=GraphRequest.newmereRequest(
loginResult.getAccessToken(),
新建GraphRequest.GraphJSONObjectCallback(){
@凌驾
未完成公共无效(JSONObject对象、GraphResponse GraphResponse){
Log.d(“Amc”,graphResponse.toString());
试一试{
stringid=object.getString(“id”);
字符串名称=object.getString(“名称”);
//String email=object.getString(“email”);
字符串性别=object.getString(“性别”);
setProfileId(object.getString(“id”));
//如果你想把它弄圆
/*
profileImageView=((ImageView)faceBookProfilePictureView.getChildAt(0));
位图=((BitmapDrawable)profileImageView.getDrawable()).getBitmap();
循环.setImageBitmap(位图);
profilepic.getChildAt(0);
*/
//字符串生日=object.getString(“生日”);
//字符串Uri1=(object.getJSONObject(“图片”).getJSONObject(“数据”).getString(“url”));
Log.d(“Amc2”、“id+”、“+name+”、“+”、“+”+”、“+性别+”、”);
}捕获(JSONException e){
e、 printStackTrace();
Log.d(“Amc2”,“e.toString());
}
}
});
Bundle参数=新Bundle();
参数.putString(“字段”、“id、姓名、电子邮件、性别、生日”);
请求。设置参数(参数);
request.executeAsync();
}
@凌驾
公开作废{
}
@凌驾
公共无效onError(FaceBook例外e){
}
};
公共登录名(){
//必需的空公共构造函数
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
sdkinInitialize(getActivity().getApplicationContext());
mcallbackManager=CallbackManager.Factory.create();
tracker=新的AccessTokenTracker(){
@凌驾
更改当前AccessToken时受保护的无效(AccessToken oldToken、AccessToken newToken){
}
};
profileTracker=新的profileTracker(){
@凌驾
更改当前配置文件时受保护的无效(配置文件旧配置文件、配置文件新配置文件){
getFbData(newProfile);
}
};
tracker.startTracking();
profileTracker.startTracking();
}
@凌驾
公共void onStop(){
super.onStop();
tracker.stopTracking();
profileTracker.stopTracking();
}
@凌驾
公共无效暂停(){
super.onPause();
profileTracker.stopTracking();
tracker.stopTracking();
}
@凌驾
公共空间{
super.ondestory();
tracker.stopTracking();
profileTracker.stopTracking();
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
返回充气机。充气(R.layout.fragment\u fb\u登录,容器,false);
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
super.onViewCreated(视图,savedInstanceState);
profilepic=(ProfilePictureView)view.findViewById(R.id.pf_视图);
LoginPreference=新的LoginPreference(getActivity());
loginButton=(loginButton)view.findViewById(R.id.login_按钮);
setReadPermissions(Arrays.asList(“公共档案”、“电子邮件”、“用户生日”);
setFragment(this);
registerCallback(mcallbackManager,mcallback);
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
onActivityResult(请求代码、结果代码、数据);
}
公共void getFbData(Profile prof){
如果(prof!=null){
Log.d(“Facebook”,getFirstName()教授);
Log.d(“Facebook”,prof.getName())
private Boolean isUserLoggedIn(){
if (AccessToken.getCurrentAccessToken() != null) {
//user is logged in already
return true;
}else{
return false;
}
}