当前位置: 代码迷 >> Android >> 将首选项添加到facebook sdk LoginButton
  详细解决方案

将首选项添加到facebook sdk LoginButton

热度:21   发布时间:2023-08-04 11:22:32.0

如标题所示,我希望我的应用程序即使在用户关闭后也保持登录状态; 我不知道如何实现这一目标
这是我的代码:

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getApplicationContext());
    callbackManager = CallbackManager.Factory.create();
    setContentView(R.layout.activity_main);
    prfpic = (ImageView) findViewById(R.id.profpic) ;
    wel = (TextView) findViewById(R.id.WELCOME);
    Info = (TextView) findViewById(R.id.info);
    Info.setText("You Must Login To Use All The Features!");
     loginButton = (LoginButton) findViewById(R.id.login_button);
    List<String> permission=new ArrayList<String>();
    permission.add("user_likes");
    permission.add("user_videos") ;
    permission.add("user_posts") ;
    AfterSTRING = "" ;
    loginButton.setReadPermissions(permission);
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {

            actk = loginResult.getAccessToken();

            GraphRequest request = GraphRequest.newMeRequest(
                    actk,
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject object, GraphResponse response) {
                            // Insert your code here
                            try {
                                wel.setVisibility(View.VISIBLE);
                                prfpic.setVisibility(View.VISIBLE);
                                wel.setText("Welcome " + object.getString("name"));
                                Picasso.with(getApplicationContext())
                                        .load(object.getJSONObject("picture").getJSONObject("data").getString("url")).into(prfpic);
                          Info.setText("Hello");

                            }catch(Exception e) {
                            }
                        }
                    });

            Bundle parameters = new Bundle();
            parameters.putString("fields", "name,picture.type(large){url}");
            request.setParameters(parameters);
            request.executeAsync();
        }

        @Override
        public void onCancel() {
            Toast.makeText(MainActivity.this, "Login Cancelled!!", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(FacebookException e) {
            Toast.makeText(MainActivity.this, "Error! Please Ary Again!!", Toast.LENGTH_SHORT).show();
        }
    });
     }

现在的问题是如何添加首选项,以便用户可以保持登录状态,直到注销为止

这是我要做的代码:

我做了一个SessionManagerFacebook类:

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

import com.uigtc.crazyapp.Activities.LoginActivity;
import com.uigtc.crazyapp.Activities.MainActivity;

import java.util.HashMap;

public class SessionManagerFacebook {
// Shared Preferences
SharedPreferences pref;

// Editor for Shared preferences
Editor editor;

// Context
Context _context;

// Shared pref mode
int PRIVATE_MODE = 0;

// Sharedpref file name
private static final String PREF_NAME = "AppFacebook";

// All Shared Preferences Keys
private static final String IS_LOGIN = "IsLoggedIn";
public static final String KEY_LANG = "lang";

// Email address (make variable public to access from outside)
public static final String KEY_EMAIL = "email";

// Constructor
public SessionManagerFacebook(Context context) {
    this._context = context;
    pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
    editor = pref.edit();
}

/**
 * Create login session
 */
public void createLoginSession(String email, String lang) {
    // Storing login value as TRUE
    editor.putBoolean(IS_LOGIN, true);
    editor.putString(KEY_LANG, lang);
    editor.putString(KEY_EMAIL, email);
    // commit changes
    editor.commit();
}

public void changeLang(String lang) {
    editor = pref.edit();
    pref.getString(KEY_LANG, lang);
    editor.apply();
}

/**
 * Check login method wil check user login status
 * If false it will redirect user to login page
 * Else won't do anything
 */
public void checkLogin() {
    // Check login status
    if (!this.isLoggedIn()) {
        // user is not logged in redirect him to Login Activity
        Intent i = new Intent(_context, LoginActivity.class);
        // Closing all the Activities
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        // Add new Flag to start new Activity
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        // Staring Login Activity
        _context.startActivity(i);
    }

}


/**
 * Get stored session data
 */
public HashMap<String, String> getUserDetails() {
    HashMap<String, String> user = new HashMap<String, String>();

    user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null));
    user.put(KEY_LANG, pref.getString(KEY_LANG, null));
    // return user
    return user;
}

/**
 * Clear session details
 */
public void logoutUser() {
    // Clearing all data from Shared Preferences
    editor.clear();
    editor.commit();
    // After logout redirect user to Loing Activity
    Intent i = new Intent(_context, MainActivity.class);
    // Closing all the Activities
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    // Add new Flag to start new Activity
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    // Staring Login Activity
    _context.startActivity(i);
}

/**
 * Quick check for login
 **/
// Get Login State
public boolean isLoggedIn() {
    return pref.getBoolean(IS_LOGIN, false);
}
}

您可以根据需要自定义它

然后在onCompleted方法上添加以下行:

 if (!sessionManagerFacebook.isLoggedIn()) {
                                sessionManagerFacebook.createLoginSession(object.getString("email"), getResources().getConfiguration().locale.toString());

                                //startActivity(new Intent(getActivity(), MainActivity.class));
                            } else {
                                user = sessionManagerFacebook.getUserDetails();
                                startActivity(new Intent(getActivity(), MainActivity.class));

                            }

现在,您必须检查是否已打开应用程序(无论用户是否登录),例如:

 public class SplashScreen extends AppCompatActivity {
        SessionManagerFacebook sessionManagerFacebook = new SessionManagerFacebook(this);

if (sessionManagerFacebook.isLoggedIn()) {
                startActivity(new Intent(SplashScreen.this, MainActivity.class));  
            }

   }
  相关解决方案