我一直在尝试将 Facebook SDK 实现到我的应用程序中,以便让用户通过该应用程序在我们的粉丝墙上发布消息。但是,我什至无法通过 SDK 登录用户。
在 SDK 示例中,给出了一个简单的示例,该示例使用Activity
尝试使用单点登录授权用户。我自己尝试过这个例子,它有效。我能够登录,我必须授权该应用程序使用我的 Facebook 数据,并且我可以看到在 LogCat 中发出和接收的请求。
现在,我尝试将相同的代码添加到我自己的应用程序中。这个应用程序是Fragment
基于使用兼容性包。有一个中央FragmentActivity
我的其余课程都很简单Fragments
。将示例代码添加到其中之一时Fragments
,Facebook 应用程序在尝试授权时会启动半秒,但随后关闭并且没有任何反应。我又回到了我的常规 Fragment 中。
此后检查 LogCat 时,除了显示我添加的一些打印检查以及它正在启动 Facebook 意图之外,没有任何迹象表明 Facebook 应用程序甚至打开或发出任何请求:
01-12 13:19:40.874: I/System.out(6087): Calling authorize
01-12 13:19:40.874: I/ActivityManager(1380): Starting activity: Intent { cmp=com.facebook.katana/.ProxyAuth (has extras) } from pid 6087
01-12 13:19:40.874: I/System.out(6087): Called authorize
除此之外,没有任何返回。没有 Facebook 检查,也没有声明说我的密钥错误或任何其他情况,什么都没有。 Facebook 的意图被调用,但几乎立即关闭,没有其他任何迹象表明它甚至是开放的。
这已经让我困惑了几个小时,我开始认为常规的、提供样本的方法在Fragments
由于方式Fragments
work.
我一直在使用的代码发布在下面。 Fragment 由一个按钮触发,该按钮调用FragmentTransaction
。我在这里做的事情根本上是错误的吗?还是 Facebook SDK 真的无法使用?Fragments
?我尝试过寻找这个问题,但找不到其他人有同样的情况。
public class FanWallFacebook extends Fragment {
Facebook facebook = new Facebook("294678133912628");
public FanWallFacebook() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.filler, container, false);
}
@Override
public void onStart() {
super.onStart();
System.out.println("Calling authorize");
facebook.authorize(getActivity(), new DialogListener() {
@Override
public void onComplete(Bundle values) {
System.out.println("Completed");
}
@Override
public void onFacebookError(FacebookError error) {
System.out.println("Facebook error: "+error.getMessage());
}
@Override
public void onError(DialogError e) {
System.out.println("General error: "+e.getMessage());
}
@Override
public void onCancel() {
System.out.println("Cancelled");
}
});
System.out.println("Called authorize");
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
System.out.println("Authorize callback'd");
}
}
Edit
刚刚尝试使用FragmentActivity
,你瞧,这确实有效。它成功登录了。看来 SDK 确实只适用于显式扩展的类...Activity
。谁能告诉我为什么会出现这种情况?我一直以为Fragments
某处延伸线Activity
以及。