2013-05-29 4 views
9

それが好きならばどのようにFacebookのファンページを開き、チェックするにはここで私は仕事をしようとしています流れです:ユーザーが

  1. 活動が開きなどのボタンは、ユーザーがボタンをクリックすると、Facebookのユーザー
  2. に示されていますログイン画面
  3. ユーザーのログインを示しており、動作します:)
  4. ユーザーが
  5. ユーザーは、Androidの戻るボタンを押すとページが好きで、活動に戻ってくる意図またはWebViewの...または何か他のものを経由してのファンページ(に向けられています
  6. アクティビティが再開し、ユーザーが実際にページを気に入っているかどうかを確認します。彼がした場合、ポイントが彼に与えられます。だから、

、この解決のために私は、ユーザーが好きなボタンをクリックすると、私は次の操作を行いRestFB(http://restfb.com/)やFacebookのAndroid API v3.0の

の両方を使用しています:付き

private Session.StatusCallback callback = 
      new Session.StatusCallback() { 
     @Override 
     public void call(Session session, SessionState state, Exception exception) { 
        //facebookClient is the RestFB object 
      facebookClient = new DefaultFacebookClient(session.getAccessToken()); 

      Intent i = new Intent(MainActivity.this, FacebookWebViewActivity.class); 
      startActivity(i); 

     } 
    }; 

このコードではFacebookに正常にログインできます(AUTH_CODEを取得してください)。次にWebViewを呼び出すと、私は自分が望むファンページにユーザーを誘導します。このWebViewの活動は非常にシンプルで、簡単に実行します。

webView.setOnKeyListener(new OnKeyListener() { 
      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { 
        Intent intent = new Intent(FacebookWebViewActivity.this, MainActivity.class); 
        startActivity(intent); 
        return true; 
       } 

       return false; 
      } 
     }); 
webView.loadUrl("https://www.facebook.com/<MyFanPage>"); 

WebViewの中で、私は私のMainActivityに彼をリダイレクトする必要がありながら、ユーザーがボタンを押すとバック​​。私は、このときにアクティビティのonResume()メソッドがトリガすることを期待していましたが、何らかの理由でこのメソッドにcheckIfLikes(null)を配置して、そのイベントが正常に行われたかどうかを確認します。利用には、以下のFQLを使用してページを好きなら

これまでのところ、私がチェックすることができます。

public void checkIfLikes(View v) { 
     final Session session = Session.getActiveSession(); 

     AsyncTask.execute(new Runnable() { 
      public void run() { 
       try { 
        facebookClient = new DefaultFacebookClient(session.getAccessToken()); 
        User user = facebookClient.fetchObject("me", User.class); 
        Page page = facebookClient.fetchObject("GeoWhere", Page.class); 

        String query = "SELECT uid FROM page_fan WHERE page_id=" + page.getId() + " and uid=" + user.getId(); 
        List<FqlUser> users = facebookClient.executeFqlQuery(query, FqlUser.class); 
       } catch(com.restfb.exception.FacebookException ex) { 
        Log.e(TAG, "1" + ex.getMessage()); 
       } catch(Exception e) { 
        Log.e(TAG, "2" + e.getMessage() + e.getStackTrace().toString()); 
       } 
      } 
     }); 
    } 

誰も私がこれを達成するのを助けることはできますか?

そして、最も重要なことに、私はAndroid用Facebook v3 APIのどこにでもFanPageを開く良い方法を見つけることができません。私は本当にWebViewを使用する必要がありますか?私は...私はこれのUXを好きではない...

おかげでたくさん、 フェリペ

EDIT 1をユーザーがファンページを好きに私のアプリを残すために持っている方法は好きではありません: 私は自分のページに移動するには、今、このコードを呼び出しています:

public static Intent getOpenFacebookIntent(Context context) { 
     try { 
      context.getPackageManager().getPackageInfo("com.facebook.katana", 0); 
      return new Intent(Intent.ACTION_VIEW, Uri.parse("fb://page/104585606418628")); 
     } catch (Exception e) { 
      Log.e(TAG, ""+e.getMessage()); 
      return new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/GeoWhere")); 
     } 
    } 

それがうまく機能し、私はページを好きなことができます。戻るボタンを押して自分のActivityに戻ると、onResumeは呼び出されません。実際、活動全体がぶら下がっています。ボタンが応答しません。私がもう一度戻ると、onResumeが呼び出されますが、失敗すると:User canceled operation.となります。これはcom.facebook.widget.LoginButtonで起こっています。非常に奇妙な。私はそれを固定のよう

EDIT 2

は思えます。 Facebookのcall()メソッドの中でstartActivity()を呼び出していて、call()メソッドが完全に終了しないようにしていました。したがって、セッションの状態は開いていませんでした。 それでは、私がやったことだった。

public void call(Session session, SessionState state, Exception exception) { 
      facebookClient = new DefaultFacebookClient(session.getAccessToken()); 

      //startActivity(getOpenFacebookIntent(MainActivity.this)); 
      //launchFacebook(); 
      //Intent i = new Intent(MainActivity.this, FacebookWebViewActivity.class); 
      //startActivity(i); 

      IS_SOCIAL = true; 
     } 

そしてどこかに私は、ユーザーがFacebook上でログインしているかどうかを確認し、ファンページに注意してください

に彼を送るに進みコードで!!

答えて

3

これは、ページが好きかどうかを確認する方法です。ユーザーIDとページIDの両方が必要です。

/* make the API call */ 
new Request(
    session, 
    "/{user-id}/likes/{page-id}", 
    null, 
    HttpMethod.GET, 
    new Request.Callback() { 
     public void onCompleted(Response response) { 
      /* handle the result */ 
     } 
    } 
).executeAsync();