【问题标题】:Direct Profile from Facebook Android来自 Facebook Android 的直接个人资料
【发布时间】:2012-07-02 10:39:26
【问题描述】:

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

http://www.facebook.com/torasanshochiku

我用this tutorial to connect 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 活动,您不能将用户“引导”到活动内的网址。那么,您想在 web 视图中加载配置文件吗?或者您可能想打开带有个人资料页面的浏览器?还是别的什么?

标签: android facebook redirect


【解决方案1】:

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

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

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

【讨论】:

  • 我知道获取 user_fbid 但我如何输入代码并仍然在 facebook 弹出窗口中?
  • 我不明白你在问什么。拥有user_fbid 后,您可以将用户重定向到该个人资料页面...
  • 我的问题是我应该在哪里输入该代码..如果让你感到困惑
  • 我对Android开发一无所知...但是在我看来您知道在调用LoginDialogListener >> onComplete函数时登录使用时...如果您不是在浏览器中,您只需打开带有用户个人资料链接的浏览器即可。
猜你喜欢
  • 1970-01-01
  • 2013-11-20
  • 1970-01-01
  • 2012-01-20
  • 2012-09-06
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多