繁体   English   中英

Facebook登录在某些设备上失败

[英]Facebook login fails on some devices

我已经实现了Facebook登录名,并且在某些设备/ AVD上运行良好。 我的开发设备是Gingerbread手机,但是使用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}

请注意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);
        }
    }
}

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

您的股票应用程序和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

否则,如果你不介意改变了Facebook SDK代码,您应该检查

在所有4.1.1设备上,Shirley Facebook登录均未中断,因此您的实施过程与此相关。

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

在Facebook SDK源代码中打开调试日志记录并重新构建它。 由于安全原因,通常默认情况下处于禁用状态。 根据您的SDK版本,它可能位于Util.java或其他位置,并且可能是一个名为“ ENABLE_LOG”的变量。

我认为Facebook登录错误通常会发生,因此要解决此问题,请耐心再次按照该教程进行操作。

否则,在这里很难解决您的问题。 因此,您可以参考此链接。

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

希望你能成功。

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

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

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

删除构建。 重新安装。 并在设备上要求权限时,允许它们。

如果不带回您的应用程序,则需要将它们添加到清单文件中:

<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和应用程序名称。

你添加了这些顺便说一句吗?

您也需要这些许可

<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登录是否正常运行。

由于Honeycomb您无法在主线程上拨打互联网电话,因此请尝试使用Android AsyncTask或自己创建一个新线程。

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

在旧版本的Facebook上使用设备时出现此错误。 完全删除facebook,或更新facebook应用程序已将其修复。

我很确定会发生这种情况,因为Android版Facebook只是移动网站的包装式WebView。

另请注意,如果您尝试删除某些设备(我的不可思议的4G LTE),则会重新安装旧版本的(网络视图)facebook。

将设备连接到Eclipse以查看logcat。 如果日志猫未运行,则在Windows中打开cmd提示符并运行adb restart,(首先设置adb路径)。 然后您可以看到logcat正在运行。 现在打开您的应用程序,然后单击Facebook登录按钮。 您可以在Log Cat中以黄色获得正确的哈希键。 将该密钥放在facebook上,现在facebook登录将在所有设备上都可以使用。 谢谢。

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 fb_button = (LoginButton)findViewById(//your resource id);
fb_button.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM