直接从Facebook Android获取个人资料

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);
}
}

我不确定你的问题是什么。你有一个Android活动,你不能在活动内“直接”将用户导向网址...所以,你想要在Webview中加载资料页吗?或者你想用浏览器打开资料页?还是其他什么需求? - Nitzan Tomer
1个回答

0

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

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

USER_FBID 是用户的 Facebook ID。所以您只需要拥有用户的 FBID,就可以通过链接直接导航到他们的个人资料。请注意,我使用协议相对 URL 在重定向时保持用户在同一协议中。如果用户正在使用 HTTPS 安全浏览,则会被重定向到安全链接。如果用户未进行安全浏览,则将被引导至普通的 HTTP 链接。


我知道如何获取用户的fbid,但我该如何将其放入代码中并仍然在Facebook弹出窗口中? - Frank Junior
我不明白你在问什么。一旦你获得了user_fbid,你可以将用户重定向到该个人资料页面... - Lix
我的问题是在哪里输入那段代码?如果让您感到困惑,我很抱歉。 - Frank Junior
我没有关于Android开发的知识... 但是在我的看法中,当调用 LoginDialogListener >> onComplete 函数时,您似乎知道用户何时登录了... 如果您不在浏览器中,那么可以直接打开用户个人资料链接来访问。 - Lix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接