Java 从Android更新Facebook
我有下面的脚本运行,它的作品完美。我想知道的是。为什么facebook会给我一个秘密密钥,如果我不必实现它,因为我在下面没有Java 从Android更新Facebook,java,android,facebook,Java,Android,Facebook,我有下面的脚本运行,它的作品完美。我想知道的是。为什么facebook会给我一个秘密密钥,如果我不必实现它,因为我在下面没有 Facebook facebook = new Facebook("APP_ID"); // Application ID of your app at facebook boolean isLoggedIn = false; @Override public void onCreate(Bundle savedInstanceState
Facebook facebook = new Facebook("APP_ID"); // Application ID of your app at facebook
boolean isLoggedIn = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Implementing SSO
facebook.authorize(this, new String[]{"publish_stream"}, new DialogListener(){
@Override
public void onComplete(Bundle values) {
//control comes here if the login was successful
// Facebook.TOKEN is the key by which the value of access token is stored in the Bundle called 'values'
Log.d("COMPLETE","AUTH COMPLETE. VALUES: "+values.size());
Log.d("AUTH TOKEN","== "+values.getString(Facebook.TOKEN));
updateStatus(values.getString(Facebook.TOKEN));
}
@Override
public void onFacebookError(FacebookError e) {
Log.d("FACEBOOK ERROR","FB ERROR. MSG: "+e.getMessage()+", CAUSE: "+e.getCause());
}
@Override
public void onError(DialogError e) {
Log.e("ERROR","AUTH ERROR. MSG: "+e.getMessage()+", CAUSE: "+e.getCause());
}
@Override
public void onCancel() {
Log.d("CANCELLED","AUTH CANCELLED");
}
});
}
//updating Status
public void updateStatus(String accessToken){
try {
Bundle bundle = new Bundle();
bundle.putString("message", "test update"); //'message' tells facebook that you're updating your status
bundle.putString(Facebook.TOKEN,accessToken);
//tells facebook that you're performing this action on the authenticated users wall, thus
// it becomes an update. POST tells that the method being used is POST
String response = facebook.request("me/feed",bundle,"POST");
Log.d("UPDATE RESPONSE",""+response);
} catch (MalformedURLException e) {
Log.e("MALFORMED URL",""+e.getMessage());
} catch (IOException e) {
Log.e("IOEX",""+e.getMessage());
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d("onActivityResult","onActivityResult");
facebook.authorizeCallback(requestCode, resultCode, data);
}
最可能的原因是您已经登录了此应用程序,或者之前使用Facebook应用程序登录,因此Facebook为您分配了一个访问令牌-该令牌在应用程序明确注销之前有效,或者用户禁用了应用程序访问(在Facebook服务器端用户配置文件中) 因此,当您进行授权时,底层Facebook SDK只检索访问令牌,您不需要登录
您可以通过为您的用户转到Facebook并进行帐户设置(右上角下拉),然后是应用程序(左上角)并禁用应用程序的访问来禁用访问令牌。此时,当您下次运行应用程序时,用户必须登录到Facebook并授权您的应用程序。最可能的原因是您已登录此应用程序,或之前使用Facebook应用程序登录,因此,Facebook为您分配了一个访问令牌,该令牌在应用程序明确注销或用户禁用应用程序访问(在Facebook服务器端用户配置文件中)之前有效 因此,当您进行授权时,底层Facebook SDK只检索访问令牌,您不需要登录
您可以通过为您的用户转到Facebook并进行帐户设置(右上角下拉),然后是应用程序(左上角)并禁用应用程序的访问来禁用访问令牌。此时,当您下次运行应用程序时,用户必须登录Facebook并授权您的应用程序。感谢您的深入回答。我确信我没有通过模拟器登录fb,这让我很困惑。那么什么时候需要散列和密钥呢?当用户首次登录时(或者需要重新登录时),应该需要应用程序ID。如果您没有提供它,或者没有提供“APP_ID”字符串,那么登录应该失败。当我手工构建基本的Facebook登录对话框URL()时,它确实如此。API密钥(正在调用哈希?)仅用于应用程序启动的注销-这是无法通过SDK完成的。并且访问令牌(您称之为密钥?)在登录后发送回应用程序,由SDK从webview Cookie中检索,并由SDK用于所有需要它的后续请求(如图形请求)。感谢您的回复。因此,除了APP_ID之外,我不需要处理任何事情,因为我只需要登录并更新状态,这是完全可以的。谢谢您的深入回答。我确信我没有通过模拟器登录fb,这让我很困惑。那么什么时候需要散列和密钥呢?当用户首次登录时(或者需要重新登录时),应该需要应用程序ID。如果您没有提供它,或者没有提供“APP_ID”字符串,那么登录应该失败。当我手工构建基本的Facebook登录对话框URL()时,它确实如此。API密钥(正在调用哈希?)仅用于应用程序启动的注销-这是无法通过SDK完成的。并且访问令牌(您称之为密钥?)在登录后发送回应用程序,由SDK从webview Cookie中检索,并由SDK用于所有需要它的后续请求(如图形请求)。感谢您的回复。因此,我不必处理除APP_ID之外的任何事情,因为我只需要登录并更新状态,这是完全正常的吗?