Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有Facebook SDK 3的Android应用程序不';t在应用程序签名后登录_Android_Facebook_Keystore_Sign_Signed - Fatal编程技术网

带有Facebook SDK 3的Android应用程序不';t在应用程序签名后登录

带有Facebook SDK 3的Android应用程序不';t在应用程序签名后登录,android,facebook,keystore,sign,signed,Android,Facebook,Keystore,Sign,Signed,我在play store上有一个应用程序,最近我用新的Facebook 3 SDK更新了它, 我想通过Facebook集成做的就是用户可以将我的应用程序中的单词/字符串发布到Facebook墙上。 我按照Facebook“get started”和下载的示例中的说明编写代码, 我使用Eclipse->properties->android->addlibrary->导入库,并选择Facebook SDK(如Facebook dev中所述)。 该应用程序与我自己的galaxy S3和S1直接从ec

我在play store上有一个应用程序,最近我用新的Facebook 3 SDK更新了它, 我想通过Facebook集成做的就是用户可以将我的应用程序中的单词/字符串发布到Facebook墙上。 我按照Facebook“get started”和下载的示例中的说明编写代码, 我使用Eclipse->properties->android->addlibrary->导入库,并选择Facebook SDK(如Facebook dev中所述)。 该应用程序与我自己的galaxy S3和S1直接从eclipse一起运行非常好,它可以正确登录并在我的墙上发布,没有任何问题

在我像往常一样签署应用程序并在play store上重新发布后,问题开始了!我不能在Facebook上登录/发布,当然,用户也不能发布

尝试运行已签名的应用程序时出现此错误:

com.facebook.orca.protocol.base.ApiException: remote_app_id does not match stored id
我开始寻找解决方案,所有的答案都是关于“密钥散列”的。。我添加了2个KeyHash,如这里所述(调试+释放键)。。还获得了一个带有代码的keyhash,如前一个链接中答案3所述,在Facebook dev dashboard中尝试了不同的设置。。“app id”/app\u id也正确,但没有成功

当我尝试使用eclipse all OK的应用程序时,如果应用程序未登录,则不会发布帖子。

这是我的代码,也许我错过了什么,我真的很困惑,2天后没有解决办法

public class main extends Activity {

    private Session.StatusCallback statusCallback = new SessionStatusCallback();

    private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
    @SuppressWarnings("unused")
    private boolean pendingPublishReauthorization = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

              //this code was for test
        try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "mypackage here", 
                    PackageManager.GET_SIGNATURES);
            for (android.content.pm.Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                }

        } catch (NameNotFoundException e) {

        } catch (NoSuchAlgorithmException e) {

        }

        buttonLoginLogout = (ImageView)findViewById(R.id.buttonLoginLogout);
        post = (ImageButton)findViewById(R.id.fbshare);

        Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);

        Session session = Session.getActiveSession();
        if (session == null) {
            if (savedInstanceState != null) {
                session = Session.restoreSession(this, null, statusCallback, savedInstanceState);
            }
            if (session == null) {
                session = new Session(this);
            }
            Session.setActiveSession(session);
            if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
                session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
            }
        }

        updateView();

post.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                 publishStory();
            }
        });
}
@Override
        public void onStart() {
            super.onStart();

            Session.getActiveSession().addCallback(statusCallback);
        }

        @Override
        public void onStop() {
            super.onStop();
            Session.getActiveSession().removeCallback(statusCallback);
        }

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

        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            Session session = Session.getActiveSession();
            Session.saveSession(session, outState);
        }

        private void updateView() {
            Session session = Session.getActiveSession();
            if (session.isOpened()) {
                buttonLoginLogout.setImageResource(R.drawable.fblogout);
                buttonLoginLogout.setOnClickListener(new OnClickListener() {
                    public void onClick(View view) { onClickLogout(); }
                });
                post.setVisibility(View.VISIBLE);
            } else {
                buttonLoginLogout.setImageResource(R.drawable.fblogin);
                buttonLoginLogout.setOnClickListener(new OnClickListener() {
                    public void onClick(View view) { onClickLogin(); }
                });
                post.setVisibility(View.INVISIBLE);
            }
        }

        private void onClickLogin() {
            Session session = Session.getActiveSession();
            if (!session.isOpened() && !session.isClosed()) {
                session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
            } else {
                Session.openActiveSession(this, true, statusCallback);
            }

        }

        private void onClickLogout() {
            Session session = Session.getActiveSession();
            if (!session.isClosed()) {
                session.closeAndClearTokenInformation();
            }

        }

        private class SessionStatusCallback implements Session.StatusCallback {
            public void call(Session session, SessionState state, Exception exception) {
                updateView();
            }
        }
        private void publishStory() {
            Session session = Session.getActiveSession();

            if (session != null){

                // Check for publish permissions    
                List<String> permissions = session.getPermissions();
                if (!isSubsetOf(PERMISSIONS, permissions)) {
                    pendingPublishReauthorization = true;
                    Session.NewPermissionsRequest newPermissionsRequest = new Session
                            .NewPermissionsRequest(this, PERMISSIONS);
                session.requestNewPublishPermissions(newPermissionsRequest);
                    return;
                }


                Request request = Request.newStatusUpdateRequest(Session.getActiveSession(), messege, new Request.Callback() {
                    public void onCompleted(Response response) {

                        Toast.makeText(main.this, "messege sent..", Toast.LENGTH_SHORT).show();
                    }
                });
                RequestAsyncTask task = new RequestAsyncTask(request);
                task.execute();
            }

        }
        private boolean isSubsetOf(Collection<String> subset, Collection<String>                                             superset) {
            for (String string : subset) {
                if (!superset.contains(string)) {
                    return false;
                }
            }
            return true;
        }
}
public类主扩展活动{
private Session.StatusCallback StatusCallback=新会话StatusCallback();
私有静态最终列表权限=Arrays.asList(“publish_actions”);
@抑制警告(“未使用”)
私有布尔pendingPublishReauthorization=false;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//此代码用于测试
试一试{
PackageInfo info=getPackageManager().getPackageInfo(
“我的包裹在这里”,
PackageManager.GET_签名);
for(android.content.pm.Signature签名:info.signatures){
MessageDigest md=MessageDigest.getInstance(“SHA”);
md.update(signature.toByteArray());
Log.d(“KeyHash:,Base64.encodeToString(md.digest(),Base64.DEFAULT));
}
}catch(nameNotFounde异常){
}捕获(无算法异常){
}
buttonLoginLogout=(ImageView)findViewById(R.id.buttonLoginLogout);
post=(ImageButton)findViewById(R.id.fbshare);
Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_令牌);
Session=Session.getActiveSession();
if(会话==null){
如果(savedInstanceState!=null){
session=session.restoreSession(this,null,statusCallback,savedInstanceState);
}
if(会话==null){
会话=新会话(本);
}
Session.setActiveSession(Session);
if(session.getState().equals(SessionState.CREATED\u TOKEN\u LOADED)){
session.openForRead(newsession.OpenRequest(this.setCallback)(statusCallback));
}
}
updateView();
post.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
//TODO自动生成的方法存根
发表故事();
}
});
}
@凌驾
public void onStart(){
super.onStart();
Session.getActiveSession().addCallback(statusCallback);
}
@凌驾
公共void onStop(){
super.onStop();
Session.getActiveSession().removeCallback(statusCallback);
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
Session.getActiveSession().onActivityResult(此、请求代码、结果代码、数据);
}
@凌驾
SaveInstanceState上受保护的无效(束超出状态){
super.onSaveInstanceState(超出状态);
Session=Session.getActiveSession();
Session.saveSession(Session,outState);
}
私有void updateView(){
Session=Session.getActiveSession();
if(session.isOpened()){
ButtonLogout.setImageResource(R.drawable.fblogout);
buttonLoginLogout.setOnClickListener(新的OnClickListener(){
public void onClick(视图){onClickLogout();}
});
post.setVisibility(View.VISIBLE);
}否则{
ButtonLogout.setImageResource(R.drawable.fblogin);
buttonLoginLogout.setOnClickListener(新的OnClickListener(){
public void onClick(视图){onClickLogin();}
});
post.setVisibility(View.INVISIBLE);
}
}
私有void onClickLogin(){
Session=Session.getActiveSession();
如果(!session.isOpened()&&!session.isClosed()){
session.openForRead(newsession.OpenRequest(this.setCallback)(statusCallback));
}否则{
openActiveSession(this,true,statusCallback);
}
}
私有void onClickLogout(){
Session=Session.getActiveSession();
如果(!session.isClosed()){
session.closeAndClearTokenInformation();
}
}
私有类SessionStatusCallback实现Session.StatusCallback{
公共无效调用(会话、会话状态、异常){
updateView();
}
}
私人虚空出版故事(){
Session=Session.getActiveSession();
if(会话!=null){
//