2013-05-29 31 views
9

Dưới đây là dòng chảy Tôi cố gắng để làm cho công việc:Làm thế nào để mở Facebook Fan Page và kiểm tra nếu người dùng thích nó

  1. Hoạt động mở ra và một nút Giống như được hiển thị cho người sử dụng
  2. Người dùng nhấp vào nút và Facebook Login Screen xuất hiện
  3. thông tin đăng nhập người dùng và là hướng đến Fan page (qua Intent hoặc WebView ... hoặc bất cứ điều gì khác mà làm việc :)
  4. tài thích trang
  5. dùng nhấn nút quay lại Android và trở lại hoạt động
  6. Tiếp tục hoạt động và kiểm tra xem người dùng có thực sự thích trang không. Nếu anh ta đã làm, điểm được trao cho anh ta.

Vì vậy, đối với giải pháp này tôi đang sử dụng cả hai RestFB (http://restfb.com/) và Facebook Android API v3.0

Khi người dùng nhấp vào nút Giống như, tôi làm như sau:

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

     } 
    }; 

Với mã này tôi có thể đăng nhập thành công vào Facebook (lấy AUTH_CODE) và sau đó tôi gọi WebView của tôi, điều này sẽ hướng người dùng đến trang Fan mà tôi muốn. Hoạt động trên WebView này rất đơn giản và đơn giản là:

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

Nếu người dùng nhấn nút quay lại trong khi trong WebView, tôi nên chuyển hướng người đó đến MainActivity của tôi. Tôi đã mong đợi phương thức của onResume() của hoạt động để kích hoạt khi điều này xảy ra, nhưng không phải vì một lý do nào đó .... Tôi dự định đặt checkIfLikes(null) vào phương pháp này để kiểm tra xem có thích hay không.

Cho đến nay, tôi có thể kiểm tra nếu sử dụng thích trang bằng cách sử dụng FQL sau:

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

bất cứ ai có thể giúp tôi đạt được điều này?

Và quan trọng nhất, tôi không thể tìm thấy bất cứ nơi nào trên API Facebook v3 cho Android một cách hay để mở FanPage. Tôi có thực sự phải sử dụng WebView không? Tôi không thích cách người dùng phải rời khỏi ứng dụng của tôi để thích trang fan hâm mộ ... Tôi không thích những UX này ...

Cảm ơn bó, Felipe

EDIT 1 : Tôi đang gọi mã này ngay bây giờ để truy cập trang của tôi:

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

Nó hoạt động tốt và tôi có thể thích trang. Khi nhấn nút quay lại và quay trở lại Hoạt động của tôi, onResume không được gọi. Trong thực tế, toàn bộ hoạt động đang treo. Các nút không trả lời. Khi tôi bấm lại, onResume được gọi, nhưng sau đó tôi thất bại với: User canceled operation. và điều này đang diễn ra tại com.facebook.widget.LoginButton. Rất kỳ quặc.

EDIT 2

Có vẻ như tôi cố định nó. Đã gọi hàm startActivity() bên trong phương thức call() của Facebook và phương thức call() không hoàn thành. Vì vậy, trạng thái của phiên không mở. Vì vậy, những gì tôi đã làm là:

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

Và ở một nơi khác trong mã tôi kiểm tra nếu người dùng đang đăng nhập vào Facebook và tiến hành gửi ông đến fan page

Chăm sóc !!

Trả lời

3

Đây là cách bạn có thể kiểm tra xem có ai đó thích trang không, bạn cần cả id người dùng và id trang.

/* 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(); 
Các vấn đề liên quan