this 구현 (승인 된 답변 참조)을 사용하여 사용자의 페이스 북 벽에 상태 업데이트를 게시하는 활동을 구축했습니다.페이스 북 앱이 기기/에뮬레이터에 설치되었을 때 페이스 북 앱이 사용자에게 게시되지 않습니다.
에뮬레이터/전화에 페이스 북 앱이 설치되어 있지 않아도 문제없이 작동합니다.
에뮬레이터/전화에 페이스 북 앱이 설치되어있는 경우 페이스 북 앱이 로그인 화면을로드하지만 로그인을 시도하면 페이스 북 앱이 사라져서 내 앱으로 다시 연결됩니다.
페이스 북 앱을 설치할 때 경험이있는 사람이 있습니까?
내 코드 : 지난 한 해 동안 여러 시스템에 안드로이드 개발 플랫폼을 설치할 필요하고 항상 한 후 :05-11 13:03:34.076: INFO/ActivityManager(98): Starting activity: Intent { cmp=com.facebook.katana/.ProxyAuth (has extras) }
05-11 13:03:34.246: INFO/ActivityManager(98): Displayed activity com.facebook.katana/.ProxyAuth: 158 ms (total 158 ms)
05-11 13:03:35.166: DEBUG/dalvikvm(12390): GC_FOR_MALLOC freed 6729 objects/418424 bytes in 44ms
05-11 13:03:35.166: DEBUG/webviewglue(12390): nativeDestroy view: 0x527e20
05-11 13:03:35.166: DEBUG/NativeCrypto(12390): Freeing OpenSSL session
편집 :
public class AchievementActivity extends Activity implements DialogListener, OnClickListener{
private Facebook facebook;
Button facebookPostButton;
String defaultFacebookPost;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.achievements);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_layout);
View achievementDivider = (View)findViewById(R.id.achievementDivider);
int[] colors = {0, 0xff00ffff, 0};
achievementDivider.setBackgroundDrawable(new GradientDrawable(Orientation.RIGHT_LEFT, colors));
//get the title of the achievement from the intent that started this activity from the activity StatisticsActivity
String achievementTitleString = getIntent().getStringExtra("title");
String achievementTextToDisplay = getAchievementTextToDisplay(achievementTitleString);
defaultFacebookPost = getDefaultPost(achievementTitleString);
//ImageView achievementActivityAchievementBadgeImageView = (ImageView)findViewById(R.id.achievementActivityAchievementBadgeImageView);
TextView achievementActivityBadgeTitleTextView = (TextView)findViewById(R.id.achievementActivityBadgeTitleTextView);
achievementActivityBadgeTitleTextView.setText(achievementTitleString);
TextView achievementActivityAchievementText = (TextView)findViewById(R.id.achievementActivityAchievementText);
achievementActivityAchievementText.setText(achievementTextToDisplay);
facebookPostButton = (Button)findViewById(R.id.facebookPostButton);
facebookPostButton.setOnClickListener(this);
}
@Override
public void onComplete(Bundle values) {
if (values.isEmpty())
{
Toast.makeText(getApplicationContext(), "Empty", Toast.LENGTH_SHORT);
return;
}
if (!values.containsKey("post_id"))
{
try
{
Bundle parameters = new Bundle();
parameters.putString("message", defaultFacebookPost);// the message to post to the wall
facebook.dialog(AchievementActivity.this, "stream.publish", parameters, this);// "stream.publish" is an API call
}
catch (Exception e)
{
// TODO: handle exception
System.out.println(e.getMessage());
}
}
try
{
facebook.logout(getApplicationContext());
}
catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onFacebookError(FacebookError error)
{
Toast.makeText(AchievementActivity.this, "onFacebookError", Toast.LENGTH_LONG);
}
@Override
public void onError(DialogError e)
{
Toast.makeText(AchievementActivity.this, "onError", Toast.LENGTH_LONG);
}
@Override
public void onCancel()
{
Toast.makeText(AchievementActivity.this, "onCancel", Toast.LENGTH_LONG);
}
@Override
public void onClick(View v)
{
if (v == facebookPostButton)
{
facebook = new Facebook("my_facebook_api");
// replace APP_API_ID with your own
facebook.authorize(this, new String[] {"publish_stream", "read_stream", "offline_access"}, this);
}
}
private String getDefaultPost(String defaultTitleString)
{
//do some stuff here to get a string to post to wall
return defaultPost;
}
private String getAchievementTextToDisplay(String achievementTitleString) {
String achievementTextToDisplay = "DEFAULT";
//do some stuff here to get text to display in the activity
//this has nothing to do with the facebook post...
return achievementTextToDisplay;
}
}
로그 캣은 저에게이 말하고있다 새로운 개발 환경을 만든 후 Facebook에 대한 문제로이 간단한 대답이 Facebook 구현이 하나의 기기에서 작동하고 다른 기기에서 작동하지 않을 수 있음을 발견했습니다. ....
다른 비밀 번호로 패키지하는 앱의 각 버전에 대한 비밀 Facebook API 키 (developer.facebook.com에 나열한 것)가 다릅니다. 예를 들어 두 대의 개발 기계가 있다고 가정 해보십시오. 이 두 시스템 모두 다른 인증서로 응용 프로그램을 빌드하므로 각 시스템에 Facebook API 비밀 키를 생성하고 developer.facebook.com에 나열해야합니다.
최신 FB 앱 업데이트가 설치되어 있습니까? 과거에 FB SDK를 사용했을 때 FB 앱이 최신 버전으로 업데이트되지 않았기 때문에 문제가 발생했습니다. (마켓 앱, 내 앱을 확인한 후 FB 앱에서 보류중인 업데이트가 없는지 확인하십시오.) –
@Mathias Lin - Faceboook SKD와 함께 제공되는 동일한 버전의 Facebook을 사용하고 있습니다. 그들은 당신이 gitHub에서 얻을 때 응용 프로그램의 컴파일 된 사본을 제공합니다. – dell116