在我的应用程序中,我正在尝试与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;
}
答案 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