某些设备上的Facebooklogin失败

我已经实施了Facebooklogin,并在一些设备/ AVD上正常工作。 我的开发设备是一个姜饼手机,但用4.1.1设备进行testing,它根本不login。按下Facebookbutton后,它显示一个空白的屏幕(试图连接Facebook),并在1-2秒后回到主屏幕。 另外,没有错误在Logcat中被烘烤或显示。 哦,Facebook应用程序安装在设备…任何想法?

更新:

我按照Mark Venzke的build议启用了日志loggingfunction,并使用了这个过程,每次login尝试都会收到这个警告(两次)(注意:使用HTC One S手机进行testing):

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} 

请注意com.htc.socialnetwork.facebook.remote.FacebookSyncService行,那么HTC设备是否需要额外的步骤?

另外,我附上了执行login的代码:

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

更新2:

HTC有没有可能将所有设备(或者其中一些设备)的默认Facebook应用程序的包名称重命名为com.htc.socialnetwork.facebook(而不是com.facebook.katana),并导致这种冲突? 我真的不认为卸载默认应用程序并从Google Play安装Facebook是一个可接受的解决scheme(另外,我认为默认的应用程序不能被卸载)。

更新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. 

Related of "某些设备上的Facebooklogin失败"

您的股票应用程序和SDK之间确实存在冲突。 所以,如果你不想uninnstall股票macros达的应用程序,仍然使用SDK 3.0我认为你最好的select,而不是体验sdk的源代码将是禁用SSO和只能通过webviewlogin。

每次尝试打开新会话时,都可以通过添加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 

否则,如果你不介意更改Facebook的SDK代码,你应该检查了这一点

所有4.1.1设备上的Shirley Facebooklogin都没有被破解,所以这是你实现的东西。

你确定Key Hash与你在developer.facebook.com上configuration的设备相同吗? 如果您使用了不同的开发密钥,或者由第三方商店安装,则密钥哈希可能不匹配。

打开Facebook SDK源代码中的debugging日志logging并重build它。 出于安全原因,它通常默认closures。 根据您的SDK版本,它可能在Util.java或其他位置,可能是一个名为“ENABLE_LOG”的variables。

我认为facebooklogin错误大多会发生,所以为了解决这个问题,你在那里按照一步一步的耐心再次教程。

其他方面很难解决你的问题。 所以你可以参考这个链接。

http://developers.facebook.com/android/

我希望你会成功。

你的问题没有足够的信息。 所以,我在这里做一些猜测。

1)首先看看Mike Venzke的回答。

2)如果这不起作用,请尝试以下操作:您需要使用SSO(单点login)在您的设备上login。 所以这里是你可以采取的步骤。

删除构build。 重新安装它。 当被问及从你的设备的权限,让他们。

如果你没有被带回你的应用程序,那么你需要将这些添加到你的清单文件:

 <activity android:name="com.facebook.LoginActivity" android:label="@string/app_name" > </activity> <meta-data android:value="@string/app_id" android:name="com.facebook.sdk.ApplicationId"/> 

其中app_name和app_id是您的Facebook应用程序页面上的相应应用程序ID和应用程序名称。

你有没有添加这些btw?

你也需要这些权限

 <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

如果你发布一些更多的信息,我可能会猜测这个问题。

我认为你的Facebook Android设备的应用程序的问题。 所以首先从设备上卸载Facebook的Android应用程序,并检查Facebook的login工作是否正常。

由于Honeycomb,您无法在主线程上进行互联网调用,请尝试使用Android AsyncTask或自行创build新线程。

http://developer.android.com/reference/android/os/AsyncTask.html

使用旧版Facebook的设备时出现此错误。 完全删除Facebook,或更新Facebook应用程序修复它。

我很确定,这是因为Facebook的Android以前只是一个包装的WebView的移动网站。

另外请注意,如果您尝试删除某些设备(我的Incredible 4G LTE),则会重新安装旧的(webview)版本的Facebook。

连接设备到日蚀看到logcat。 如果log cat没有运行,在windows中打开cmd提示符并运行adb restart,(先设置adbpath)。 那么你可以看到logcat运行。 现在打开你的应用程序,并点击Facebookloginbutton。 你可以在log cat中得到黄色的正确的哈希键。 把这个键放在Facebook上,现在Facebooklogin将在每个设备上工作。 谢谢。

 List<String> permissions = new ArrayList<String>(); permissions.add("email"); //start Facebook session openActiveSession(this, true, new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { if (session.isOpened()) { //make request to the /me API Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { if (user != null) { String firstName = user.getFirstName(); String lastName = user.getLastName(); String id = user.getId(); String email=null; try { email = user.getProperty("email").toString(); } catch (Exception e) { // TODO: handle exception } String gender = (String) user.getProperty("gender"); String birthday = user.getBirthday(); //welcome.setText("Hello \n" + firstName+"\n"+lastName+"\n"+email+"\n"+gender+"\n"+birthday+"!"); if(firstName!=null) { SharedPreferences.Editor editor = settings.edit(); editor.putString("fligin", "1"); editor.putString("firstName", firstName); editor.putString("lastName", lastName); editor.putString("email", email); editor.putString("gender", gender); editor.putString("birthday", birthday); editor.commit(); Intent intent=new Intent(getApplicationContext(), RegistrationOneActivity.class); startActivity(intent); //overridePendingTransition( R.anim.slide_in_up, R.anim.slide_out_up ); finish(); } else { Toast.makeText(getApplicationContext(),"Person information is null", Toast.LENGTH_SHORT).show(); finish(); } } } }); } } }, permissions); 

尝试在java源代码中定义loginbutton的地方插入这一行

 LoginButton fb_button = (LoginButton)findViewById(//your resource id); fb_button.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);