如何处理活动的Facebook的Andr​​oid SDK中v4.1的访问令牌 [英] How to handle Facebook Android SDK v4.1 Access Token between Activities

查看:310
本文介绍了如何处理活动的Facebook的Andr​​oid SDK中v4.1的访问令牌的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我去到另一个活动后成功登录,用户在无法访问到Facebook的访问令牌

  AccessToken.getCurrentAccessToken()

我在LogCat中得到这样的:

  {的accessToken令牌:ACCESS_TOKEN_REMOVED权限:[]}


解决方案

我的解决方案,如果您使用的是Android的登录按钮是:
要使用片段,并调用它的每一个活动里面,你可以选择显示或不取决于当前有哪些活动会做,所有的片段的方法将工作得很好。

下面是一些code:

 包com.infoplusplus.anix.currentapp;进口android.content.Intent;
进口android.os.Bundle;
进口android.support.v4.app.Fragment;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;进口com.facebook.AccessToken;
进口com.facebook.AccessTokenTracker;
进口com.facebook.CallbackManager;
进口com.facebook.FacebookCallback;
进口com.facebook.FacebookException;
进口com.facebook.FacebookSdk;
进口com.facebook.Profile;
进口com.facebook.ProfileTracker;
进口com.facebook.login.LoginResult;
进口com.facebook.login.widget.LoginButton;
/ **
 *创建者埃尼斯在2015年9月4日。
 * /
公共类LoginFacebookFragment扩展片段{
    公共LoginFacebookFragment(){
    }    私人ProfileTracker profileTracker;
    私人AccessTokenTracker tokenTracker;
    私人LoginButton loginButton;    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getActivity()getApplicationContext());
        mCallbackManager = CallbackManager.Factory.create();
        tokenTracker =新AccessTokenTracker(){
            @覆盖
            保护无效onCurrentAccessTokenChanged(的accessToken oldToken,的accessToken newToken){
            }
        };
        profileTracker =新ProfileTracker(){
            @覆盖
            保护无效onCurrentProfileChanged(个人oldProfile,简介newProfile){
                如果(newProfile!= NULL){
                    // TODO该用户已注销
                }其他{
                   // TODO用户可能登录或改变了一些他的个人资料设置
                }
            }
        };
        profileTracker.startTracking();
        tokenTracker.startTracking();
    }    @覆盖
    公共查看onCreateView(LayoutInflater气筒,
                             ViewGroup中的容器中,
                             捆绑savedInstanceState){
        查看rootView = inflater.inflate(R.layout.fragment_login_facebook,集装箱,FALSE);
        返回rootView;
    }    私人CallbackManager mCallbackManager;
    私人FacebookCallback< LoginResult> mCallback =新FacebookCallback< LoginResult>(){
        @覆盖
        公共无效的onSuccess(LoginResult loginResult){
            // TODO,实施的onSuccess
        }        @覆盖
        公共无效onCancel(){
            // TODO,实施onCancel
        }        @覆盖
        公共无效onerror的(FacebookException E){
            // TODO,实施的onError序处理的错误
        }
    };    @覆盖
    公共无效onViewCreated(查看视图,捆绑savedInstanceState){
        super.onViewCreated(查看,savedInstanceState);
        loginButton =(LoginButton)view.findViewById(R.id.btn_facebookLogin);
        // TODO:从用户那里得到一些更多的权限
        //loginButton.setReadPermissions(\"user_friends);
        loginButton.setFragment(本);
        loginButton.registerCallback(mCallbackManager,mCallback);
    }    @覆盖
    公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
        super.onActivityResult(要求code,结果code,数据);
        mCallbackManager.onActivityResult(要求code,结果code,数据);
    }    @覆盖
    公共无效onResume(){
        super.onResume();
        profileTracker.startTracking();
        tokenTracker.startTracking();
    }    @覆盖
    公共无效的onPause(){
        super.onPause();
        profileTracker.stopTracking();
        tokenTracker.stopTracking();
    }    @覆盖
    公共无效的onDestroy(){
        super.onDestroy();
        tokenTracker.stopTracking();
        profileTracker.stopTracking();
    }
}

When i go to another activity after successfully logged a user in i can't access to the Facebook Access token

AccessToken.getCurrentAccessToken()

I got this in the LogCat:

{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}

解决方案

My solution if you are using the android login button is: To use a fragment and call it inside every activity, you can choose to display it or not depending on what the current activity will be doing, all the fragment's methods will work just fine.

Here is some code:

package com.infoplusplus.anix.currentapp;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.facebook.AccessToken;
import com.facebook.AccessTokenTracker;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.Profile;
import com.facebook.ProfileTracker;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;


/**
 * Created by Anix on 09/04/2015.
 */
public class LoginFacebookFragment extends Fragment {
    public LoginFacebookFragment() {
    }

    private ProfileTracker profileTracker;
    private AccessTokenTracker tokenTracker;
    private LoginButton loginButton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getActivity().getApplicationContext());
        mCallbackManager = CallbackManager.Factory.create();
        tokenTracker = new AccessTokenTracker() {
            @Override
            protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) {
            }
        };
        profileTracker = new ProfileTracker() {
            @Override
            protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) {
                if (newProfile != null) {
                    //TODO the user has logged out
                } else {
                   //TODO the user may have logged in or changed some of his profile settings
                }
            }
        };
        profileTracker.startTracking();
        tokenTracker.startTracking();
    }

    @Override
    public View onCreateView(LayoutInflater inflater,
                             ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_login_facebook, container, false);
        return rootView;
    }

    private CallbackManager mCallbackManager;
    private FacebookCallback<LoginResult> mCallback = new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            //TODO, implement onSuccess
        }

        @Override
        public void onCancel() {
            //TODO, implement onCancel
        }

        @Override
        public void onError(FacebookException e) {
            //TODO, implement onError inorder to handle the errors
        }
    };

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        loginButton = (LoginButton) view.findViewById(R.id.btn_facebookLogin);
        //TODO: get some more permissions from the user
        //loginButton.setReadPermissions("user_friends");
        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);
    }

    @Override
    public void onResume() {
        super.onResume();
        profileTracker.startTracking();
        tokenTracker.startTracking();
    }

    @Override
    public void onPause() {
        super.onPause();
        profileTracker.stopTracking();
        tokenTracker.stopTracking();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        tokenTracker.stopTracking();
        profileTracker.stopTracking();
    }
}

这篇关于如何处理活动的Facebook的Andr​​oid SDK中v4.1的访问令牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆