2014-03-12 2 views
4

Я использую следующий код, чтобы получить возможность отправлять на друг стену:Публикация на стене друзей с помощью Android FB SDK.

public void postFB(){ 
     Bundle params = new Bundle(); 
     params.putString("name", "An example parameter"); 
     params.putString("link", "https://www.example.com/"); 
     params.putString("to", "1481597430"); 

     WebDialog feedDialog = (
       new WebDialog.FeedDialogBuilder(getActivity(), 
        Session.getActiveSession(), 
        params)) 
       .setOnCompleteListener(new OnCompleteListener(){ 

        @Override 
        public void onComplete(Bundle values, 
          FacebookException error) { 
         System.out.println("Complete "+error +"Values "+values); 

        }}) 
       .build(); 
      feedDialog.show(); 
    } 

Сценария здесь является то, что я использую другой фрагмент для входа в Facebook, используя Thier LoginButton и я хочу отправить это сообщение в другом фрагмент. В то время как мое приложение требует, чтобы пользователь входил в FB только при первом запуске, означает ли это каждый раз, когда я хочу отправить сообщение на стену друзей, мне нужно будет сначала попросить пользователя зарегистрироваться?

Как и на втором прогоне при попытке разместить на стене друзей я получаю следующее сообщение об ошибке:

03-15 16:13:06.679: E/AndroidRuntime(8206): java.lang.NullPointerException: Argument 'session' cannot be null 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at com.facebook.internal.Validate.notNull(Validate.java:29) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at com.facebook.widget.WebDialog$BuilderBase.<init>(WebDialog.java:461) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at com.facebook.widget.WebDialog$FeedDialogBuilder.<init>(WebDialog.java:626) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at com.exa.birthdayrem.Fragment1_3.postFB(Fragment1_3.java:73) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at com.exa.birthdayrem.Fragment1_3$1.onClick(Fragment1_3.java:255) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at android.view.View.performClick(View.java:4091) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at android.view.View$PerformClick.run(View.java:17072) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at android.os.Handler.handleCallback(Handler.java:615) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at android.os.Handler.dispatchMessage(Handler.java:92) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at android.os.Looper.loop(Looper.java:153) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at android.app.ActivityThread.main(ActivityThread.java:5000) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at java.lang.reflect.Method.invoke(Method.java:511) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 
03-15 16:13:06.679: E/AndroidRuntime(8206):  at dalvik.system.NativeStart.main(Native Method) 
+0

Для метода поста есть код мне/пост, где Repalce меня с друзьями идентификатором пользователя – OMAK

+0

Вы можете уточнить? – User3

+0

Нет, вы можете разместить это в любом фрагменте. Вы должны использовать парадигму «ActiveSession», которую дает SDK. Вы должны иметь возможность получать активный сеанс из любого фрагмента (поскольку он является статичным) и использовать его в конструкторе вашего веб-диалога. Во-вторых, вы можете инициировать (или открывать) сеанс из кэшированной информации (см. Метод Session.openActiveSessionFromCache). Если вы вызываете это в фрагменте запуска, он откроет активный сеанс без запроса пользователя или появления какого-либо пользовательского интерфейса. Наконец, вы должны всегда проверять, является ли активный сеанс нулевым, прежде чем использовать его. –

ответ

0

взглянуть на https://developers.facebook.com/docs/android/share#interfaces где вы найдете описание того, как можно использовать долю диалоги Android FB SDK.

Вы также найдете некоторые примеры код здесь: https://developers.facebook.com/docs/android/share#linkfeed

+0

Я читал все это раньше, но, однако, они не показывают, как публиковать на стене друзей, это только дает вариант с акциями. – User3

0
private void publishStory() { 
    final Session session = Session.getActiveSession(); 

    if (session != null){ 
     List<String> permissions = session.getPermissions(); 
     if (!isSubsetOf(PERMISSIONS, permissions)) { 
      if(shareDialog.isShowing()){ 
       shareDialog.dismiss(); 
      } 
      final AlertDialog.Builder alert=new AlertDialog.Builder(this); 
      alert.setMessage("please give permission by log in."); 
      alert.setPositiveButton("Login", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog,int which) { 
        pendingPublishReauthorization = true; 
        Session.NewPermissionsRequest newPermissionsRequest = new Session 
          .NewPermissionsRequest(FacebookShareActivity.this, PERMISSIONS); 
        session.requestNewPublishPermissions(newPermissionsRequest); 
       } 
      }); 
      alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog,int which) { 
        finish(); 
        return; 
       } 
      }); 
      final AlertDialog alertDialog=alert.create(); 
      alertDialog.show(); 
      alertDialog.setOnKeyListener(new DialogInterface.OnKeyListener() { 

       @Override 
       public boolean onKey(DialogInterface dialog, int keyCode, 
         KeyEvent event) { 
        if (keyCode == KeyEvent.KEYCODE_BACK && 
          event.getAction() == KeyEvent.ACTION_UP && 
          !event.isCanceled()) { 
         alertDialog.cancel(); 
          finish(); 
          return true; 
         } 
        return false; 
       } 

      }); 



      return; 
     } 
     if(shareDialog.isShowing()){ 
      shareDialog.setMessage("Sharing"); 

     }else{ 
      try { 
       shareDialog = ProgressDialog.show(
         this, "", 
         "Sharing..", true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     Bundle postParams = new Bundle(); 


      postParams.putString("name", shareMsg); 
      postParams.putString("caption", shareCaption); 
      postParams.putString("description", shareDescription); 
      postParams.putString("link", shareLink); 
      postParams.putString("picture", sharePicture); 

     Request.Callback callback= new Request.Callback() { 
      public void onCompleted(Response response) { 
       FacebookRequestError error = response.getError(); 
       if (error != null) { 
        if(shareDialog.isShowing()){ 
         shareDialog.dismiss(); 
        } 

        showAlert("", error.getErrorMessage()); 
       } else { 
        if(shareDialog.isShowing()){ 
         shareDialog.dismiss(); 

        } 
        showAlert("", "Shared on Facebook"); 


       } 
      } 
     }; 

     Request request = new Request(session, "1481597430/feed", postParams, 
       HttpMethod.POST, callback); 

     RequestAsyncTask task = new RequestAsyncTask(request); 
     task.execute(); 

    } 
    else { 
     if(shareDialog.isShowing()){ 
      shareDialog.dismiss(); 
     } 
    } 

} 
/** 
* Checking Permissions for Facebook sharing 
* 
*/ 
private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) { 
    for (String string : subset) { 
     if (!superset.contains(string)) { 
      return false; 
     } 
    } 
    return true; 
} 
+0

Пожалуйста, определите параметры для запроса. – User3

+0

Попробуйте изменить код – OMAK

Смежные вопросы