2015-07-07 31 views
5

Chcę odpowiedzieć na facebooku bez okna, tylko programowo, próbuję zAndroid: Opublikuj na Facebook programowo z FB SDK 4.x

public void login(CallbackManager callbackManager) { 
    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      Log.d(LOGTAG, "facebook login success"); 
      share("kk"); 
     } 

     @Override 
     public void onCancel() { 
      Log.w(LOGTAG, "facebook login canceled"); 
      share("kk"); 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      Log.e(LOGTAG, "facebook login error"); 
      exception.printStackTrace(); 
     } 
    }); 

    LoginManager.getInstance().logInWithPublishPermissions((Activity) context, Arrays.asList("publish_actions")); 
} 

public void share(final String msg) { 

    Log.d(LOGTAG, "facebook sharing new message"); 
    Set<String> permissions = AccessToken.getCurrentAccessToken().getPermissions(); 
    AccessToken accessToken = AccessToken.getCurrentAccessToken(); 

    Bundle postParams = new Bundle(); 
    postParams.putString("name", "yourTitle"); 
    postParams.putString("caption", "yourCaption"); 
    postParams.putString("description", "yourDesc"); 
    postParams.putString("message", "yourMessage"); 

    GraphRequest request = new GraphRequest(accessToken, "me/feed", postParams, HttpMethod.POST, null); 
    AsynTaskGraphRequest asynTaskGraphRequest = new AsynTaskGraphRequest(request); 
    asynTaskGraphRequest.execute(); 
} 

problemem jest to, że gdy aplikacja loguje się na Facebooku to pokazuje komunikat „nie pozwól aplikacji Opublikuj na Facebooku”, choć używam

LoginManager.getInstance().logInWithPublishPermissions((Activity) context, Arrays.asList("publish_actions")); 

enter image description here

z drugiej strony, w jaki sposób mogę sprawdzić, czy użytkownik jest nadal zalogowany fb zadzwonić do logInWithPublishPermissions tylko raz?

Dziękujemy!

+0

Czy dodania użytkownika jako zweryfikowane programisty/testera w Facebooku app stronie? – Ankush

+0

Masz rację, rozwiązuje mój problem! Dzięki! – BlackBishop

Odpowiedz

3

Jak powiedział @Ankush, konieczne jest zarejestrowanie się jako autoryzowany programista w ustawieniach aplikacji na stronie programisty Facebook.

Moja ostatnia kod (fine teraz pracuje) wynosi:

public class FbManager { 

private Context context; 
private static final String LOGTAG = "FbManager"; 
private CallbackManager callbackManager; 

public FbManager(Context context, CallbackManager callbackManager){ 
    this.context = context; 
    this.callbackManager = callbackManager; 
} 

public static void traceKeyHash(Activity activity){ 
    try { 
     PackageInfo info = activity.getPackageManager().getPackageInfo("com.muv.android", PackageManager.GET_SIGNATURES); 
     for (Signature signature : info.signatures) { 
      MessageDigest md = MessageDigest.getInstance("SHA"); 
      md.update(signature.toByteArray()); 
      Log.i(LOGTAG, "Share - KeyHash: " + Base64.encodeToString(md.digest(), Base64.DEFAULT)); 
     } 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void share(final String msg) { 

    if (isLoggedIn()) { 
     post(msg); 
    } 
    else{ 
     LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       Log.d(LOGTAG, "facebook login success"); 
       post(msg); 
      } 

      @Override 
      public void onCancel() { 
       Log.w(LOGTAG, "facebook login canceled"); 
      } 

      @Override 
      public void onError(FacebookException exception) { 
       Log.e(LOGTAG, "facebook login error"); 
       exception.printStackTrace(); 
      } 
     }); 

     LoginManager.getInstance().logInWithPublishPermissions((Activity) context, Arrays.asList("publish_actions")); 
    } 
} 

public boolean isLoggedIn() { 
    AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
    return accessToken != null; 
} 

private void post(final String msg){ 
    Log.d(LOGTAG, "facebook posting new message"); 
    Set<String> permissions = AccessToken.getCurrentAccessToken().getPermissions(); 
    AccessToken accessToken = AccessToken.getCurrentAccessToken(); 

    Bundle postParams = new Bundle(); 
    postParams.putString("message", msg); 

    GraphRequest request = new GraphRequest(accessToken, "me/feed", postParams, HttpMethod.POST, null); 
    GraphRequestAsyncTask asynTaskGraphRequest = new GraphRequestAsyncTask (request); 
    asynTaskGraphRequest.execute(); 
} 
} 
+0

Czy możesz przesłać zgłoszenie importowe? "AsynTaskGraphRequest" nie jest rozwiązany w moim przypadku Używam 4.6.0 sdk na Facebooku –

Powiązane problemy