2012-01-12 5 views
4

私は自分のアプリケーションに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にも拡張されていると思った。

+0

私は同じ問題をここで発見しました。 –

+0

'Fragment'はその階層のどこにでも' Activity'を持っていません。これは、同じ問題を抱える 'Object' –

+0

から直接拡張されています。 – LuxuryMode

答えて

0

私はFacebookのやり取りにFragmentActivityを使ってしまいました。理想的な解決策ではありませんが、機能します。

関連する問題