私は自分のアプリケーションにFacebook SDKを実装しようとしています。これにより、ユーザーはアプリケーションを通して私たちのfanwallにメッセージを投稿できます。しかし、SDKを使用してユーザーをログインさえしても失敗しました。Facebook SDKはアクティビティでのみ動作しますか?
SDKのサンプルでは、Activity
を使用してシングルサインオンを使用してユーザーを認証する簡単なサンプルが提供されています。私はこの例を自分で試してみました。私はログインすることができる、私は自分のFacebookのデータを使用するようにアプリを認証しなければならなかったと私はLogCatで行われ、受信された要求を見ることができます。
今、自分のアプリに同じコードを追加しようとしました。このアプリは、Compatibilityパッケージを使用して、Fragment
に基づいています。 1つの中心FragmentActivity
があり、残りのクラスは単純ですFragments
。サンプルコードをFragments
のいずれかに追加すると、Facebookアプリは、認証を試みると0.5秒間起動しますが、その後は終了して何も起こりません。私は再び私の定期的な断片に戻ります。
この後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
。
私が使用しているコードは以下の通りです。フラグメントは、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");
}
}
編集
だけで仕事をすること、FragmentActivity
を使用してみました、そして驚くなかれ。これは正常にログインします。SDKのように見えるのは、明示的に...Activity
に拡張されたクラスでのみ機能します。誰かが私になぜそれが当てはまるのか考えてもらえますか?私はいつもFragments
のどこかの行がActivity
にも拡張されていると思った。
私は同じ問題をここで発見しました。 –
'Fragment'はその階層のどこにでも' Activity'を持っていません。これは、同じ問題を抱える 'Object' –
から直接拡張されています。 – LuxuryMode