android问题在手机上打开facebook的允许权限窗口

时间:2011-09-08 10:38:23

标签: android facebook

在我的应用程序中,我正在尝试与Facebook连接。登录后,如果有任何权限,它将要求允许权限,也可以发布墙。

相同的应用程序在模拟器上正常工作,但在电话登录窗口上,并且允许权限窗口未来。 为什么会这样?

在我的登录代码下面,

  public class LoginListener implements DialogListener {

        @Override
        public void onComplete(Bundle values) {
            if (testAuthenticatedApi())
                System.out.println("Login successfully...");
            if (testAuthenticatedErrors()) {
                System.out.println("Login successfully...");
            }
        }
}


 public boolean testAuthenticatedApi() {
        if (!facebook.isSessionValid()) 
            return false;
        try {
            Log.d("Tests", "Testing request for 'me'");
            String response = facebook.request("me");
            JSONObject obj = Util.parseJson(response);
            if (obj.getString("name") == null || 
                    obj.getString("name").equals("")) {
                return false;
            }

            Log.d("Tests", "Testing graph API wall post");
            Bundle parameters = new Bundle();
            parameters.putString("message", "hello world");
            parameters.putString("description", "test test test");
            response = facebook.request("me/feed", parameters, 
                    "POST");
            Log.d("Tests", "got response: " + response);
            if (response == null || response.equals("") || 
                    response.equals("false")) {
                return false;
            }

            Log.d("Tests", "Testing graph API delete");
            response = response.replaceAll("\\{\"id\":\"", "");
            response = response.replaceAll("\"\\}", "");
            response = facebook.request(response, new Bundle(), 
                    "DELETE");
            if (!response.equals("true")) return false;

            Log.d("Tests", "Testing old API wall post");
            parameters = new Bundle();
            parameters.putString("method", "stream.publish");
            parameters.putString("attachment", 
                "{\"name\":\"Name=Title\"," +
                "\"href\":\"http://www.google.fr/\",\"" +
                "caption\":\"Caption\",\"description\":\"Description" +
                "\",\"media\":[{\"type\":\"image\",\"src\":" +
                "\"http://www.kratiroff.com/logo-facebook.jpg\"," +
                "\"href\":\"http://developers.facebook.com/\"}]," +
                "\"properties\":{\"another link\":{\"text\":\"" +
                "Facebook homepage\",\"href\":\"http://www.facebook." +
                "com\"}}}");;
            response = facebook.request(parameters);
            Log.d("Tests", "got response: " + response);
            if (response == null || response.equals("") || 
                    response.equals("false")) {
                return false;
            }

            Log.d("Tests", "Testing wall post delete");
            response = response.replaceAll("\"", "");
            response = facebook.request(
                    response, new Bundle(), "DELETE");
            if (!response.equals("true")) return false;

            Log.d("Tests", "All Authenticated Tests Passed");
            return true;
        } catch (Throwable e) {
            e.printStackTrace();
            return false;
        }
    }

    public boolean testAuthenticatedErrors() {
        if (!facebook.isSessionValid()) return false;

        Log.d("Tests", "Testing that request for 'me/invalid' is rejected");
        try {
            Util.parseJson(facebook.request("me/invalid"));
            return false;
        } catch (Throwable e) {
            Log.d("Tests", "*" + e.getMessage() + "*");
            if (!e.getMessage().equals("Unknown path components: /invalid")) {
                return false;
            }
        }

        Log.d("Tests", "Testing that old API call with invalid method fails");
        Bundle params = new Bundle();
        params.putString("method", "something_invalid");
        try {
            Util.parseJson(facebook.request(params));
            return false;
        } catch (Throwable e) {
            Log.d("Tests", "*" + e.getMessage() + "*");
            if (!e.getMessage().equals("Unknown method") ) {
                return false;
            }
        }

        Log.d("Tests", "All Authenticated Error Tests Passed");
        return true;
    }

3 个答案:

答案 0 :(得分:0)

您是否检查了通过ADB中的错误日志返回的消息? 阅读此内容的其他人可能会有所帮助,因此他们可以帮助您。 :)

答案 1 :(得分:0)

问题可能是登录的SSO(单点登录)功能。

以下链接可能会有所帮助。

facebook login dialog disappears soon after loading

http://ukgupta.blogspot.com/2011/07/facebook-implementation-into-android.html

答案 2 :(得分:0)

如果您想强制使用遗产                基于对话框的授权,为此传递FORCE_DIALOG_AUTH                  参数。否则只需省略此参数和Facebook                  将使用合适的默认值 它在此授权代码中作为第三个参数传递。

public void authorize(Activity activity, String[] permissions,
        int activityCode, final DialogListener listener)

如果小于零(< 0),则不需要SSO。希望它能帮助其他人。如需进一步查询,请参阅 Unable to retrieve access token for facebook on real device