2013-05-29 17 views
9

İşte çalışmalarını yapmaya çalışıyorum akış aşağıdaki gibidir:Nasıl Facebook Fan Page açmak ve kullanıcı sevdim olmadığını kontrol etmek

  1. Aktivite açılır ve bir düğme gibi kullanıcıya düğmesi ve Facebook'un üzerinde
  2. Kullanıcı tıklama gösterilir Giriş Ekranı
  3. Kullanıcı oturum açma işlemlerini gösterir ve işleri :)
  4. Kullanıcı
  5. Kullanıcı Android'in geri düğmesine bastığında sayfayı sever ve Faaliyet gel Niyet veya WebView'da ... ya da başka bir şey aracılığıyla Fan Page (yöneliktir
  6. Etkinlik, kullanıcının gerçekten sayfayı beğenip beğenmediğini kontrol eder ve denetler. Eğer yapmış olsaydı, ona puan verilir. Kullanıcı Beğen düğmesini tıkladığında

Yani, bu çözüm için ben RestFB (http://restfb.com/) ve Facebook Android hem API v3.0

kullanıyorum, ben aşağıdakileri yapın: With

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); 

     } 
    }; 

Bu kodu başarılı bir şekilde Facebook'a giriş yapabilirim (AUTH_CODE olsun) ve sonra Web Sayfamı çağırıyorum, bu da kullanıcıyı istediğim Fan Sayfasına yönlendirmeli. Bu WebView faaliyeti çok basittir ve basit yapın:

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'da, benim MainActivity onu yönlendirmek gerekirken kullanıcı düğmeyi geri basarsa. Bu olay gerçekleştiğinde tetiklemek için etkinliğin onResume() yöntemini beklemekteydim, ancak bir nedenden ötürü değil ... Beğenilenin olup olmadığını kontrol etmek için bu yönteme checkIfLikes(null) kodunu koymaya niyetim var.

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()); 
       } 
      } 
     }); 
    } 

kimse bana bunu başarmak yardımcı olabilir: kullanım aşağıdaki FQL kullanarak sayfayı sevdiysen Şimdiye kadar

, kontrol edebilirim?

Ve en önemlisi, Android için Facebook v3 API'sinde hiçbir yeri bulamıyorum, FanPage'i açmanın iyi bir yolu. WebView'i kullanmak zorunda mıyım? Ben ... Ben bu UX'i sevmiyorum ...

Teşekkür bir demet Felipe

DÜZENLEME 1 kullanıcı fan sayfası beğenebilmesi Uygulamamı ayrılmak zorunda sevmedim :

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")); 
     } 
    } 

O iyi çalışıyor ve ben sayfasını beğenebilir: benim sayfasına gitmek için şimdi bu kodu yürütmesini. Geri düğmesine basıp Etkinliğime dönersek, onResume başlatılmaz. Aslında, tüm aktivite asılıyor. Düğmeler cevap vermiyor. Tekrar geri basıldığında, onResume çağrılır, ancak User canceled operation. ile başarısız olur ve bu com.facebook.widget.LoginButton adresinde gerçekleşir. Çok tuhaf. Tamir ettim gibi

DÜZENLEME 2

görünüyor. Facebook'un call() yönteminin içindeki startActivity() yöntemini çağırıyordu ve bu, call() yönteminin tamamen bitmemesini sağlıyordu. Yani oturumun durumu açık değildi. Yani ne yaptığını oldu:

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; 
     } 

Ve başka bir yerde ben kullanıcı Facebook'ta açmış olup olmadığını kontrol edin ve fan sayfası özen

ona gönderme işlemine devam kodunda !!

cevap

3

Bu, bir sayfa gibi birinin olup olmadığını, hem kullanıcı kimliğine hem de sayfa kimliğine ihtiyacınız olup olmadığını kontrol edebilirsiniz.

/* 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(); 
İlgili konular