2013-05-30 38 views
0

我在我的应用中设置了与fb的连接:点击一个按钮,应用程序执行登录,在墙上发布帖子,然后注销。使用我的开发者帐户,一切都适合我,但是尝试与其他手机和其他帐户,如果安装了官方FB应用程序,该应用程序不会发布任何内容。我刚换了key-hash,我没有使用debug.keystore,而是一个新的keystore .....任何人都可以帮助我? 非常感谢!用sdk 3.0在facebook上发布并且android不起作用

我也跟着从FB教程,这是我的登录方法

private void onClickLogin() { 
    Session session = Session.getActiveSession(); 
    login=true; 
    if (session!=null && !session.isOpened() && !session.isClosed()) { 
     session.openForPublish(new Session.OpenRequest(this) 
      .setPermissions(Arrays.asList("publish_actions")) 
      .setCallback(callback)); 
    } else { 
     Session.openActiveSession(getActivity(), this, true, callback); 
    } 
} 

这是所有的“有趣”的代码

boolean login= false; 
private Session.StatusCallback callback = new Session.StatusCallback() { 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     onSessionStateChange(session, state, exception); 
    } 
}; 
private UiLifecycleHelper uiHelper; 
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions"); 
private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization"; 
private boolean pendingPublishReauthorization = false; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    uiHelper = new UiLifecycleHelper(getActivity(), callback); 
    uiHelper.onCreate(savedInstanceState); 

} 

public void setEnt(Entry e) { 
    art=e; 
} 
@Override 
public void onResume() { 
    super.onResume(); 
    Session session = Session.getActiveSession(); 
    uiHelper.onResume(); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    uiHelper.onActivityResult(requestCode, resultCode, data); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    uiHelper.onPause(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    uiHelper.onDestroy(); 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    uiHelper.onSaveInstanceState(outState); 
} 
private void onClickLogin() { 
    Session session = Session.getActiveSession(); 
    login=true; 
    if (session!=null && !session.isOpened() && !session.isClosed()) { 
     session.openForPublish(new Session.OpenRequest(this) 
      .setPermissions(Arrays.asList("publish_actions")) 
      .setCallback(callback)); 
    } else { 
     Session.openActiveSession(getActivity(), this, true, callback); 
    } 
} 

private void onSessionStateChange(Session session, SessionState state, Exception exception) { 

    if (state.isOpened()) { 
       publishStory(); 
     } else if (state.isClosed()) { 
     } 

} 

private void publishStory() { 
    Session session = Session.getActiveSession(); 
    if(login){ 
    if (session != null){ 


     Bundle postParams = new Bundle(); 
     postParams.putString("name", art.getTitle()); 
     postParams.putString("caption", art.getSection()); 
     postParams.putString("description", "xxx"); 
     postParams.putString("link", "xxx"); 
     postParams.putString("picture", "xxx"); 

     Request.Callback callback= new Request.Callback() { 
      public void onCompleted(Response response) { 
       JSONObject graphResponse = response.getGraphObject().getInnerJSONObject(); 
       String postId = null; 
       try { 
        postId = graphResponse.getString("id")+" articolo postato"; 

       } catch (JSONException e) { 
        Log.i(TAG, 
         "JSON error "+ e.getMessage()); 
       } 
       FacebookRequestError error = response.getError(); 
       if (error != null) { 
        Toast.makeText(getActivity() 
         .getApplicationContext(), 
         error.getErrorMessage(), 
         Toast.LENGTH_SHORT).show(); 
        } else { 
         Toast.makeText(getActivity() 
          .getApplicationContext(), 
          postId, 
          Toast.LENGTH_LONG).show(); 
         logout(); 
       } 
      } 
     }; 

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

     RequestAsyncTask task = new RequestAsyncTask(request); 
     task.execute(); 
     Log.v("FB", "FINE"); 
    } 
    } 
} 

private void logout(){ 
    login=false; 
    if (Session.getActiveSession() != null) { 
     Session.getActiveSession().closeAndClearTokenInformation(); 
    } 

    Session.setActiveSession(null); 
} 

private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) { 
    for (String string : subset) { 
     if (!superset.contains(string)) { 
      return false; 
     } 
    } 
    return true; 
} 


    } 
+0

检查您的应用程序的设置在FB不管是在沙盒模式。如果它是然后改变它。 – Mahesh

回答

0

我认为你的应用程序可以被放置在沙箱模式这是什么导致他人不能访问你的应用程序。你可能是应用程序的管理,并与您的帐户甚至可以在沙盒模式 App settings page

访问应用程序,所以禁用它,使他人您的应用程序的工作。 另请检查您是否添加了使用密钥存储文件生成的keyhash

+0

感谢您的回答,但我已经禁用了沙箱模式.... – gauss

+0

您添加的keyhash如何?是使用keystore文件生成的,而不是debug.keystore – Mahesh

+0

是的!事实上,如果我尝试发布即使安装了官方的fb应用程序,它的工作原理!我无法弄清楚为什么它不适用于所有人!:( – gauss

0

在应用程序设置中关闭sandbox mode

点击这里去你App Dashboard

+0

谢谢为答案,但像一个对mahesh说,我已经禁用沙箱模式.... – gauss

相关问题