Dha*_*ani 9 android facebook facebook-login
我已经实现了Facebook登录,它在一些设备/ AVD上工作正常.我的开发设备是姜饼手机,但是用4.1.1设备测试它,它根本就没有登录.按下facebook按钮后,它显示一个空白屏幕(试图连接Facebook),1-2秒后它回到主屏幕.此外,Logcat中没有任何错误被烘烤或显示.哦,Facebook应用程序安装在设备中...任何想法?
更新:
我按照Mark Venzke的建议并使用此程序启用了日志记录,每次登录尝试都会收到此警告(两次)(注意:使用HTC One S手机进行测试):
07-05 20:14:50.582: W/PackageManager(605): Unable to load service info ResolveInfo{4171dbf0 com.htc.socialnetwork.facebook.remote.FacebookSyncService p=0 o=0 m=0x108000}
Run Code Online (Sandbox Code Playgroud)
请注意com.htc.socialnetwork.facebook.remote.FacebookSyncService行,那么HTC设备是否需要额外的步骤?
另外,我附加了执行登录的代码:
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (isResumed) {
FragmentManager manager = getSupportFragmentManager();
int backStackSize = manager.getBackStackEntryCount();
for (int i = 0; i < backStackSize; i++) {
manager.popBackStack();
}
com.facebook.Settings.addLoggingBehavior(LoggingBehavior.REQUESTS);
if (state.isOpened()) {
Bundle params = new Bundle();
params.putString("fields", "id");
params.putString("limit", "1");
Request request = new Request(Session.getActiveSession(), "me", params, HttpMethod.GET, new Callback()
{
@Override
public void onCompleted(Response response)
{
if (response != null)
{
Log.d("AuthGraphResponse", response.toString());
long id;
try {
id = response.getGraphObject().getInnerJSONObject().getLong("id");
app.setFacebookId(id);
Log.d("UserID", Long.valueOf(id).toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
}
});
RequestAsyncTask task = new RequestAsyncTask(request);
task.execute();
showFragment(AUTH, false);
} else if (state.isClosed()) {
showFragment(UNAUTH, false);
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新2:
是否有可能HTC将所有设备(或其中一些设备中的默认Facebook应用程序的包名称)重命名为com.htc.socialnetwork.facebook(而不是com.facebook.katana)并导致此冲突?我真的不认为卸载默认应用程序并从Google Play安装Facebook是一种可接受的解决方案(另外,我认为默认应用程序无法卸载).
更新3:
尚未解决.19小时奖励100个声望赏金!
更新4:
另一个有趣的LogCat:
07-15 10:55:51.718: E/chromium(30475): external/chromium/net/disk_cache/stat_hub.cc:216: [0715/105551:ERROR:stat_hub.cc(216)] StatHub::Init - App com.facebook.katana isn't supported.
Run Code Online (Sandbox Code Playgroud)
您的股票应用程序与SDK之间肯定存在冲突.因此,如果您不想安装HTC应用程序并且仍然使用SDK 3.0,我认为您最好的选择是在不修改sdk的源代码的情况下禁用SSO并仅通过webview登录.
每次尝试打开新会话时,都可以通过添加SessionLoginBehavior.SUPRESS_SSO轻松完成此操作.以下是我从Facebook SDK中的SessionLoginSample(LoginUsingActivityActivity)更改的示例,向您展示如何操作:
@Override
public void onCreate(Bundle savedInstanceState) {
...
Session session = Session.getActiveSession();
if (session == null) {
if (savedInstanceState != null) {
session = Session.restoreSession(this, null, statusCallback, savedInstanceState);
}
if (session == null) {
session = new Session(this);
}
Session.setActiveSession(session);
//add the check, for if session is opened
if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED) || !session.getState().isOpened()) {
//Add the suppress SSO behavior to force webview auth dialog to popup
session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback).setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO));
}
}
...
}
//then put your code in the statusCallback method or keep it in the session state change listener
Run Code Online (Sandbox Code Playgroud)
否则,如果你不介意改变了Facebook SDK代码,您应该检查这出
| 归档时间: |
|
| 查看次数: |
6433 次 |
| 最近记录: |