当我使用Facebook的Android SDK单点登录时,我得到一个完全无用的页面。
“您已经授权happyapp。 按“好”继续。
此页面会破坏用户体验。我怎么能摆脱它。很多人都看到了这个,但没有找到解决方案。
即使Facebook承认这是一个问题,请参阅:http://forum.developers.facebook.net/viewtopic.php?id=84548
有没有人知道任何解决方法?
答案 0 :(得分:11)
我做的方式(没有额外的OAuth解决方案)是在Kieveli建议的情况下在偏好中存储访问令牌。当主要活动开始时,从首选项中查找令牌,如果没有,则启动授权过程并将结果令牌存储在首选项中。
更难的部分是处理您的应用的令牌过期或取消授权(即令牌在首选项中,但不再有效)。
对于这种情况,对于每个FB API /图调用,请检查指示身份验证失败的异常。如果失败,请再次启动授权/令牌存储过程。
答案 1 :(得分:5)
使用这里的建议,这是适合我的代码,希望它可以帮助某人
登录前执行此操作
SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(FacebookLogin.this);
String access_token = prefs.getString("access_token", null);
Long expires = prefs.getLong("access_expires", -1);
if (access_token != null && expires != -1)
{
facebook.setAccessToken(access_token);
facebook.setAccessExpires(expires);
}
if (!facebook.isSessionValid())
{
facebook.authorize(FacebookLogin.this, new DialogListener() {
...
成功登录后执行此操作
String token = facebook.getAccessToken();
long token_expires = facebook.getAccessExpires();
SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(FacebookLogin.this);
prefs.edit().putLong("access_expires", token_expires).commit();
prefs.edit().putString("access_token", token).commit();
答案 2 :(得分:1)
在任何设备通过Facebook授权我的应用后,我遇到了这个问题。我的模拟器继续完美工作但我无法通过“好”对话框屏幕并做任何有意义的事情。我将facebook.FORCE_DIALOG_AUTH参数添加到authorize()调用中。现在它要求我为每台设备登录一次,并在共享偏好设置中设置TOKEN和到期时间。
Button button_facebook = (Button) findViewById(R.id.button_share_on_facebook);
button_facebook.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
if (access_token != null) {
facebook.setAccessToken(access_token);
}
if (expires != 0) {
facebook.setAccessExpires(expires);
}
if (!facebook.isSessionValid()) {
facebook.authorize(YourActivity.this, new String[] { "user_photos,publish_checkins,publish_actions,publish_stream" }, facebook.FORCE_DIALOG_AUTH, new DialogListener() {
@Override
public void onComplete(Bundle values) {
SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", facebook.getAccessToken());
editor.putLong("access_expires", facebook.getAccessExpires());
editor.commit();
postSomethingToFacebook();
}
@Override
public void onFacebookError(FacebookError e) {
Log.e("Facebook-Authorize", "FacebookError Error: " + e.getMessage());
}
@Override
public void onError(DialogError e) {
Log.e("Facebook-Authorize", "DialogError Error: " + e.getMessage());
}
@Override
public void onCancel() {
Log.w("Facebook-Authorize", "Cancelled.");
}
});
} else {
postSomethingToFacebook();
}
});
答案 3 :(得分:0)
绕过SDK并使用您自己的OAuth解决方案。获取后保存访问令牌。尝试直接使用它而不将用户发送到Facebook权限页面。令牌过期后,您将需要他们再次授予权限。使用高级功能可以降低责任(以及更多工作)。
答案 4 :(得分:0)
如果您的设备中没有FB应用程序,则意味着弹出窗口将出现在您的Safari浏览器中。 在您的设备中安装FB应用程序并尝试使用FB登录已经授权的屏幕未出现。 谢谢。