Facebook聊天使用xmpp问题 - NoSuchAlgorithmException:未找到KeyStore jks实现

时间:2014-04-01 10:23:08

标签: java android facebook xmpp

我想使用xmpp显示facebook聊天,我想列出在线好友然后使用xmpp.for聊天,这会产生很多错误;现在我就像这样的代码,这是正确的代码,然后我按照这个链接对于ssl store http://randomizedsort.blogspot.in/2010/09/step-to-step-guide-to-programming.html和此Using the Android TrustStore for aSmack in Android 4+ (ICS)也是如此。

Button setup = (Button) this.findViewById(R.id.setup);
        setup.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                mHandler.post(new Runnable() {
                    public void run()
                    {
                       // mDialog.show();
                       loginfacebook();


                    }
                });
            }
        });

public void loginfacebook()
    {
        Session currentSession = Session.getActiveSession();
        if (currentSession == null || currentSession.getState().isClosed()) {

         System.out.println("your current fb session is closed........ or you are not logged in...............");
            Session session = new Session.Builder(XMPPClient.this).build();
            Session.setActiveSession(session);
            currentSession = session;
        }

        if (currentSession.isOpened()) {
            // Do whatever u want. User has logged in
         System.out.println("your are already logged in userrrrrrrrrrrrrrrrrrrrrrrrrrr...............");
          Session.openActiveSession(XMPPClient.this, true, new Session.StatusCallback() {
         @SuppressWarnings("deprecation")
        @Override
             public void call(final Session session, SessionState state, Exception exception) {
               if (session.isOpened()) {
               ////do after login work here....................
                 //  mDialog.show();

                   System.out.println("App id"+fb.getAppId() + "Access token"+ session.getAccessToken());
                      ConnectionConfiguration config = new ConnectionConfiguration("chat.facebook.com", 5222);
                        config.setSASLAuthenticationEnabled(true);
                        config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
                        XMPPConnection xmpp = new XMPPConnection(config);
                        SASLAuthentication.registerSASLMechanism("X-FACEBOOK-PLATFORM",SASLXFacebookPlatformMechanism.class);
                        SASLAuthentication.supportSASLMechanism("X-FACEBOOK-PLATFORM", 0);

                        try {
                            xmpp.connect();


                        } catch (XMPPException e1) {
                            Log.i("XMPPClient",
                                    "Unable to " + xmpp.getHost());

                            e1.printStackTrace();
                        }
                        try {
                            xmpp.login(fb.getAppId(), session.getAccessToken());



                        } catch (XMPPException e) {
                            e.printStackTrace();
                        } 
               }
         }
          });
        }

        else if (!currentSession.isOpened()) {
            // Ask for username and password
         System.out.println("your are going to ask for authenticationnnnnnnnnnnnn...............");
            OpenRequest op = new Session.OpenRequest((Activity) XMPPClient.this);

            op.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
            op.setCallback(null);

            List<String> permissions = new ArrayList<String>();
           // permissions.add("publish_stream");
            //permissions.add("user_likes");
            permissions.add("email");
            permissions.add("user_birthday");
            permissions.add("friends_birthday");
            op.setPermissions(permissions);

            Session session = new Session.Builder(XMPPClient.this).build();
            Session.setActiveSession(session);
            session.openForPublish(op);
        }
    }

    public void call(Session session, SessionState state, Exception exception) 
    {
    }     



      public void onActivityResult(int requestCode, int resultCode, Intent data) {
     System.out.println("Face boookkk has returned valuessssssssssssssssssssssssss...............");
          super.onActivityResult(requestCode, resultCode, data);
          if (Session.getActiveSession() != null)
          Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);

          Session currentSession = Session.getActiveSession();

          if (currentSession == null || currentSession.getState().isClosed()) {
           System.out.println("unable to create sessionnnnnnnnnnnn...............");
              Session session = new Session.Builder(XMPPClient.this).build();
              Session.setActiveSession(session);
              currentSession = session;
          }

          if (currentSession.isOpened()) {
           System.out.println("your are already logged in userrrrrrrrrrrrrrrrrrrrrrrrrrr...............");
           Session.openActiveSession(XMPPClient.this, true, new Session.StatusCallback() {
         @SuppressWarnings("deprecation")
        @Override
             public void call(final Session session, SessionState state, Exception exception) {
               if (session.isOpened()) {
               // after login workkkkkkkkkkk
                   System.out.println("App id"+fb.getAppId() + "Access token"+ session.getAccessToken());
            /*     ConnectionConfiguration config = new ConnectionConfiguration("chat.facebook.com", 5222);
                config.setSASLAuthenticationEnabled(true);
                config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
                XMPPConnection xmpp = new XMPPConnection(config);
                SASLAuthentication.registerSASLMechanism("X-FACEBOOK-PLATFORM",SASLXFacebookPlatformMechanism.class);
                SASLAuthentication.supportSASLMechanism("X-FACEBOOK-PLATFORM", 0);*/


             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
              ConnectionConfiguration config = new ConnectionConfiguration("chat.facebook.com", 5222);
                config.setSASLAuthenticationEnabled(true);
                config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
                XMPPConnection xmpp = new XMPPConnection(config);
                SASLAuthentication.registerSASLMechanism("X-FACEBOOK-PLATFORM",SASLXFacebookPlatformMechanism.class);
                SASLAuthentication.supportSASLMechanism("X-FACEBOOK-PLATFORM", 0);
               config.setTruststoreType("AndroidCAStore");
              config.setTruststorePassword(null);
             config.setTruststorePath(null);
            try {
                xmpp.connect();


            } catch (XMPPException e1) {
                Log.i("XMPPClient",
                        "Unable to " + xmpp.getHost());

                e1.printStackTrace();
            }
            try {
                xmpp.login(fb.getAppId(), session.getAccessToken());



            } catch (XMPPException e) {
                e.printStackTrace();
            } 
          } else {
              ConnectionConfiguration config = new ConnectionConfiguration("chat.facebook.com", 5222);
                config.setSASLAuthenticationEnabled(true);
                config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
                XMPPConnection xmpp = new XMPPConnection(config);
                SASLAuthentication.registerSASLMechanism("X-FACEBOOK-PLATFORM",SASLXFacebookPlatformMechanism.class);
                SASLAuthentication.supportSASLMechanism("X-FACEBOOK-PLATFORM", 0);
               config.setTruststoreType("BKS");
              String path = System.getProperty("javax.net.ssl.trustStore");
              if (path == null)
                  path = System.getProperty("java.home") + File.separator + "etc"
                      + File.separator + "security" + File.separator
                      + "cacerts.bks";
           config.setTruststorePath(path);
          try {
                xmpp.connect();


            } catch (XMPPException e1) {
                Log.i("XMPPClient",
                        "Unable to " + xmpp.getHost());

                e1.printStackTrace();
            }
            try {
                xmpp.login(fb.getAppId(), session.getAccessToken());



            } catch (XMPPException e) {
                e.printStackTrace();
            } 
          }


               }
         }
          });
      }
    } I am searching lot for connecting facebook xmpp not getting proper solutions.

1 个答案:

答案 0 :(得分:0)

对于那个错误,我使用了这样的代码,在搜索了很多链接后,我得到了一个很好的解决方案,解决了我当前的问题Successfull authentication but status is always "offline" and rooster is empty (Android,XMPP,Facebook)

我使用了这样的代码

 if (currentSession.isOpened()) {
            // Do whatever u want. User has logged in
         System.out.println("your are already logged in userrrrrrrrrrrrrrrrrrrrrrrrrrr...............");
          Session.openActiveSession(XMPPClient.this, true, new Session.StatusCallback() {
         @SuppressWarnings("deprecation")
        @Override
             public void call(final Session session, SessionState state, Exception exception) {
               if (session.isOpened()) {
               ////do after login work here....................

                   System.out.println("App id"+fb.getAppId() + "Access token"+ session.getAccessToken());

                        ConnectionConfiguration config = new ConnectionConfiguration("chat.facebook.com", 5222);
                        config.setDebuggerEnabled(true);
                        config.setSASLAuthenticationEnabled(true);
                       config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
                      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
                           config.setTruststoreType("AndroidCAStore");
                           config.setTruststorePassword(null);
                           config.setTruststorePath(null);
                       } else {
                           config.setTruststoreType("BKS");
                           String path = System.getProperty("javax.net.ssl.trustStore");
                           if (path == null)
                               path = System.getProperty("java.home") + File.separator + "etc"
                                   + File.separator + "security" + File.separator
                                   + "cacerts.bks";
                           config.setTruststorePath(path);
                       }
                      XMPPConnection  xmpp = new XMPPConnection(config);
                        SASLAuthentication.registerSASLMechanism("X-FACEBOOK-PLATFORM",SASLXFacebookPlatformMechanism.class);
                        SASLAuthentication.supportSASLMechanism("X-FACEBOOK-PLATFORM", 0);
                        Presence presence = new Presence(Presence.Type.subscribe);
                         presence.setStatus("Online");
                         xmpp.sendPacket(presence);
                        System.out.println("PRE-CONNECTED");


                        try {
                            xmpp.connect();


                        } catch (XMPPException e1) {
                            Log.i("XMPPClient",
                                    "Unable to " + xmpp.getHost());

                            e1.printStackTrace();
                        }
                        try {
                            xmpp.login(fb.getAppId(), session.getAccessToken());



                        } catch (XMPPException e) {
                            e.printStackTrace();
                        } 
               }
         }
          });
        }