3

我想问一下成功登录 Facebook 后如何重定向到某人的个人资料?
示例:如果成功登录并授权,它将直接进入此页面:

http://www.facebook.com/torasanshochiku

我使用本教程连接 Facebook

这是我的FacebookConnectionActivity

public abstract class FBConnectionActivity extends Activity {
public static final String TAG = "FACEBOOK";
private Facebook mFacebook;
public static final String APP_ID = "271496479563642";
private AsyncFacebookRunner mAsyncRunner;
private static final String[] PERMS = new String[] { "read_stream" };
private SharedPreferences sharedPrefs;
private Context mContext;

private TextView username;
private ProgressBar pb;

public void setConnection() {
        mContext = this;
        mFacebook = new Facebook(APP_ID);
        mAsyncRunner = new AsyncFacebookRunner(mFacebook);
}

public void getID(TextView txtUserName, ProgressBar progbar) {
        username = txtUserName;
        pb = progbar;
        if (isSession()) {
                Log.d(TAG, "sessionValid");
                mAsyncRunner.request("me", new IDRequestListener());
        } else {
                // no logged in, so relogin
                Log.d(TAG, "sessionNOTValid, relogin");
                mFacebook.authorize(this, PERMS, new LoginDialogListener());
        }
}

public boolean isSession() {
        sharedPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);
        String access_token = sharedPrefs.getString("access_token", "x");
        Long expires = sharedPrefs.getLong("access_expires", -1);
        Log.d(TAG, access_token);

        if (access_token != null && expires != -1) {
                mFacebook.setAccessToken(access_token);
                mFacebook.setAccessExpires(expires);
        }
        return mFacebook.isSessionValid();
}

private class LoginDialogListener implements DialogListener {

        @Override
        public void onComplete(Bundle values) {
                Log.d(TAG, "LoginONComplete");
                String token = mFacebook.getAccessToken();
                long token_expires = mFacebook.getAccessExpires();
                Log.d(TAG, "AccessToken: " + token);
                Log.d(TAG, "AccessExpires: " + token_expires);
                sharedPrefs = PreferenceManager
                                .getDefaultSharedPreferences(mContext);
                sharedPrefs.edit().putLong("access_expires", token_expires)
                                .commit();
                sharedPrefs.edit().putString("access_token", token).commit();
                mAsyncRunner.request("me", new IDRequestListener());
        }

        @Override
        public void onFacebookError(FacebookError e) {
                Log.d(TAG, "FacebookError: " + e.getMessage());
        }

        @Override
        public void onError(DialogError e) {
                Log.d(TAG, "Error: " + e.getMessage());
        }

        @Override
        public void onCancel() {
                Log.d(TAG, "OnCancel");
        }
}

private class IDRequestListener implements RequestListener {

        @Override
        public void onComplete(String response, Object state) {
                try {
                        Log.d(TAG, "IDRequestONComplete");
                        Log.d(TAG, "Response: " + response.toString());
                        JSONObject json = Util.parseJson(response);

                        final String id = json.getString("id");
                        final String name = json.getString("name");
                        FBConnectionActivity.this.runOnUiThread(new Runnable() {
                                public void run() {
                                        username.setText("Welcome: " + name+"\n ID: "+id);
                                        pb.setVisibility(ProgressBar.GONE);

                                }
                        });
                } catch (JSONException e) {
                        Log.d(TAG, "JSONException: " + e.getMessage());
                } catch (FacebookError e) {
                        Log.d(TAG, "FacebookError: " + e.getMessage());
                }
        }

        @Override
        public void onIOException(IOException e, Object state) {
                Log.d(TAG, "IOException: " + e.getMessage());
        }

        @Override
        public void onFileNotFoundException(FileNotFoundException e,
                        Object state) {
                Log.d(TAG, "FileNotFoundException: " + e.getMessage());
        }

        @Override
        public void onMalformedURLException(MalformedURLException e,
                        Object state) {
                Log.d(TAG, "MalformedURLException: " + e.getMessage());
        }

        @Override
        public void onFacebookError(FacebookError e, Object state) {
                Log.d(TAG, "FacebookError: " + e.getMessage());
        }

}

//@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        mFacebook.authorizeCallback(requestCode, resultCode, data);
}
}
4

1 回答 1

0

您可以将用户重定向到某人的个人资料的方法是使用通用个人资料页面链接。
它看起来像这样 -

//facebook.com/profile.php?id=USER_FBID

USER_FBID用户 Facebook ID在哪里。因此,您需要做的就是让用户 FBID,然后您可以使用链接直接导航到他们的个人资料。请注意,我使用协议相对 URL 来使用户在重定向时使用相同的协议。如果用户正在安全地浏览,HTTPS那么他们将被重定向到安全链接。如果用户浏览不安全,那么他们将被引导至正常HTTP链接。

于 2012-07-02T10:44:53.770 回答