自定义Facebook登录并将令牌保存到Android上的共享首选项

时间:2012-10-04 16:11:00

标签: android facebook

我正在尝试开发可以发布到Facebook的应用。

所以设置了SDK,我可以像hackbook示例一样使用FB按钮登录。 我怎么也不喜欢它的样子。我正在开发一个应用程序,然后在它上面浮动webview pop?

也许我弄错了,但我想在我的设置活动中以某种方式获取Facebook登录名/密码,然后将令牌保存到共享首选项。

有办法吗?

1 个答案:

答案 0 :(得分:1)

在设置有效会话时,可以使用以下代码保存SharedPref中的访问令牌。

Utility.fb.authorize(MainActivity.this,Utility.fbPermissions , new DialogListener() {

                @Override
                public void onFacebookError(FacebookError e) {
                    // TODO Auto-generated method stub
                    Toast.makeText(context, "Facebook Error", Toast.LENGTH_LONG).show();

                }

                @Override
                public void onError(DialogError e) {
                    // TODO Auto-generated method stub
                    Toast.makeText(context, "Dialog Error", Toast.LENGTH_LONG).show();


                }

                @Override
                public void onComplete(Bundle values) {
                    // TODO Auto-generated method stub
                    Toast.makeText(context, "User Logged In", Toast.LENGTH_LONG).show();
                    Utility.editor = Utility.prefs.edit();
                    Utility.editor.putString("access_token", Utility.fb.getAccessToken());
                    Utility.editor.putLong("access_expires", Utility.fb.getAccessExpires());
                    Utility.editor.commit();
                    Intent intent = new Intent(context, UpdateStatus.class);
                    startActivity(intent);

                }

                @Override
                public void onCancel() {
                    // TODO Auto-generated method stub
                    Toast.makeText(context, "Cancelled by user", Toast.LENGTH_LONG).show();

                }
            });

稍后您只需检查访问令牌的有效性并直接登录用户,而无需询问用户名或密码。

Utility.prefs = getSharedPreferences(Utility.PREF_UTILITY_FILE_NAME, MODE_PRIVATE);
        Utility.access_token = Utility.prefs.getString("access_token", null);
        Utility.expires = Utility.prefs.getLong("access_expires", 0);

        if(Utility.access_token != null)
        {
            Utility.fb.setAccessToken(Utility.access_token);
        }

        if(Utility.expires !=0)
        {
            Utility.fb.setAccessExpires(Utility.expires);
        }

        if(Utility.fb.isSessionValid())
        {
            //user is already logged in

            }

编辑:自从Facebook API删除了离线访问权限后,您可以通过将以下代码放入您正在进行身份验证的活动中来授权用户登录来提高访问令牌的有效性

public void onResume() {    
        super.onResume();
        Utility.fb.extendAccessTokenIfNeeded(this, null);
    }