2013-05-29 1 views
9

Hier ist der Fluss ich Arbeit zu machen versuche:Wie Facebook Fan-Seite öffnen und überprüfen, ob Benutzer mochte es

  1. Aktivität öffnet und eine Schaltfläche auf Benutzer
  2. Nutzer klickt auf eine Schaltfläche und Facebook gezeigt Anmeldebildschirm erscheint
  3. Benutzer-Logins und auf Fan-Seite (über Intent oder WebView ... oder irgendetwas anderes gerichtet, das funktioniert :)
  4. Benutzer mögen die Seite
  5. Benutzer Android-zurück-Taste drücken und wieder zu Aktivität
  6. Die Aktivität wird fortgesetzt und überprüft, ob der Benutzer die Seite wirklich gemocht hat. Wenn er es tat, werden ihm Punkte gegeben.

Also, für diese Lösung verwende ich beide RestFB (http://restfb.com/) und Facebook Android API v3.0

Wenn der Benutzer auf die Schaltfläche klickt, ich folgendes:

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

     } 
    }; 

Mit Mit diesem Code kann ich mich erfolgreich bei Facebook einloggen (bekomme den AUTH_CODE) und rufe dann mein WebView auf, welches den User auf die Fan-Seite leiten soll, die ich möchte. Diese Aktivität WebView ist sehr einfach und einfach tun:

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

Wenn der Benutzer Taste drückt zurück, während in der WebView, ich ihn in meinem MainActivity umleiten soll. Ich habe erwartet, dass die Aktivität onResume() Methode auslösen, wenn dies passiert, aber es ist nicht, aus irgendeinem Grund .... Ich beabsichtige, die checkIfLikes(null) auf diese Methode zu setzen, um zu überprüfen, ob die gemocht passiert oder nicht.

Bisher kann ich überprüfen, ob die Verwendung der Seite mit dem folgenden FQL gefallen:

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

Kann mir jemand helfen, dieses Ziel zu erreichen?

Und am wichtigsten, ich kann nirgendwo auf der Facebook v3 API für Android eine nette Möglichkeit finden, die FanPage zu öffnen. Muss ich wirklich das WebView benutzen? Ich weiß nicht wie die Art und Weise der Benutzer zu verlassen hat meinen App die Fanseite zu mögen ... Ich habe nicht die UX dies mag ...

Dank einem Haufen, Felipe

EDIT 1 : ich diesen Code bin Aufruf jetzt auf meiner Seite zu gehen:

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

Es funktioniert gut und ich kann die Seite mögen. Wenn Sie die Zurück-Taste drücken und zu meiner Aktivität zurückkehren, wird onResume nicht aufgerufen. In der Tat hängt die ganze Aktivität. Tasten antworten nicht. Wenn ich wieder drücke, wird onResume aufgerufen, aber dann schieße ich mit: User canceled operation. und dies passiert bei com.facebook.widget.LoginButton. Sehr komisch.

EDIT 2

Scheint, wie ich es fest. Aufruf der startActivity() in der Methode call() von Facebook, wodurch die Methode call() nicht vollständig beendet wurde. Der Status der Sitzung war nicht offen. Also, was ich tat, war:

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

Und an anderer Stelle im Code, den ich überprüfen, ob der Benutzer mit dem Senden von ihm an die Fanseite auf Facebook und gehen

Achten Sie angemeldet ist !!

Antwort

3

So können Sie prüfen, ob jemand eine Seite mag, Sie benötigen sowohl die Benutzer-ID als auch die Seiten-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();