2017-04-03 72 views
1

我想在我的應用程序中使用谷歌登錄,但當我點擊谷歌登錄,但它顯示現有帳戶,並且當我選擇一個現有帳戶進行簽名時,它不會重定向到應用程序或重新導向Uri它再次顯示該現有帳戶彈出窗口。Codename one谷歌登錄問題

下面是我的代碼: -

google.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent evt) { 
          String clientId = "XXXXXXXXX-kv0h8ef3k0ppo9lda1bpopjacfde4ds5.apps.googleusercontent.com"; 
        String redirectURI = "https://www.codenameone.com/oauth2callback";     
        String clientSecret = "XXXXXXXXXXXXQE1quZ"; 

        Login gc = GoogleConnect.getInstance(); 
        gc.setClientId(clientId); 
        gc.setRedirectURI(redirectURI); 
        gc.setClientSecret(clientSecret); 
        userlogin = gc; 
        gc.setCallback(new LoginListener(LoginListener.GOOGLE)); 
        if(!gc.isUserLoggedIn()){ 
         gc.doLogin(); 
        }else{ 
         showGoogleUser(gc.getAccessToken().getToken()); 
        } 

       } 
      }); 


public class LoginListener extends LoginCallback { 
    public static final int FACEBOOK = 0; 

     public static final int GOOGLE = 1; 

     private int loginType; 

     public LoginListener(int loginType) { 
      this.loginType = loginType; 
     } 

     public void loginSuccessful() { 

      try { 
       AccessToken token = userlogin.getAccessToken(); 
       if (loginType == FACEBOOK) { 
        showFacebookUser(token.getToken()); 
       } else if (loginType == GOOGLE) { 
        showGoogleUser(token.getToken()); 
       } 

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

     } 

     public void loginFailed(String errorMessage) { 
      Dialog.show("Login Failed", errorMessage, "Ok", null); 
     } 



private void showGoogleUser(String token){ 
     Dialog.show("Login","Login successful","Ok",""); 
     ConnectionRequest req = new ConnectionRequest(); 
     req.addRequestHeader("Authorization", "Bearer " + token); 
     req.setUrl("https://www.googleapis.com/plus/v1/people/me"); 
     req.setPost(false); 
     InfiniteProgress ip = new InfiniteProgress(); 
     Dialog d = ip.showInifiniteBlocking(); 
     NetworkManager.getInstance().addToQueueAndWait(req); 
     d.dispose(); 
     byte[] data = req.getResponseData(); 
     JSONParser parser = new JSONParser(); 
     Map map = null; 
     try { 
      map = parser.parseJSON(new InputStreamReader(new ByteArrayInputStream(data), "UTF-8")); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
     String name = (String) map.get("displayName"); 
     Map im = (Map) map.get("image"); 
     String url = (String) im.get("url"); 
     username.setText(name); 
     userLabel.setIcon(URLImage.createToStorage((EncodedImage) user, url, url, URLImage.RESIZE_SCALE)); 


     TextArea search = new TextArea(); 
     Button searchbutton = new Button("Search"); 
     container12.add(search); 
     container12.add(searchbutton); 

     searchbutton.addActionListener((evt) -> { 
     String searchstr = search.getText(); 
     ConnectionRequest req2 = new ConnectionRequest() 
     { 
      @Override 
      protected void readResponse(InputStream input) throws IOException { 
       InputStreamReader reader = new InputStreamReader(input); 
       JSONParser parser1 = new JSONParser(); 
       Map<String, Object> parsed2 = parser1.parseJSON(reader); 
       Log.p(parsed2.toString()); 
       ArrayList array = (ArrayList)parsed2.get("items"); 
       JSONArray items_array = new JSONArray(array); 


       ArrayList<String> arrayList = new ArrayList<>(); 
     try{ 
     JSONArray array2 = new JSONArray(items_array.toString()); 
     for(int i =0; i<array2.length() ; i++){ 
      JSONObject jsonobject = array2.getJSONObject(i); 

       String name = jsonobject.getString("displayName"); 
       String image = (String) ((JSONObject) jsonobject.get("image")).getString("url"); 

         Image searchimage = theme.getImage("user.png"); 
         Label searchLabel = new Label(searchimage); 
         searchLabel.setIcon(URLImage.createToStorage((EncodedImage) user, image, image, URLImage.RESIZE_SCALE)); 
         Label namelabel = new Label(name); 

         container12.add(namelabel); 
         container12.add(searchLabel); 
        } 
     }catch (JSONException ex) { 
         ex.printStackTrace(); 
        } 
       } 


     }; 
     req2.setPost(false); 
     req.addRequestHeader("Authorization", "Bearer " + token); 
     req2.setUrl("https://www.googleapis.com/plus/v1/people"); 
     req2.addArgument("query", search.getText()); 
     req2.addArgument("key", googleApiKey); 
     InfiniteProgress ip2 = new InfiniteProgress(); 
     Dialog d2 = ip2.showInifiniteBlocking(); 
     NetworkManager.getInstance().addToQueueAndWait(req2); 
     d2.dispose(); 

     }); 




    } 

回答

1

如果您已經登錄,您的代碼看起來像它只是顯示有關登錄用戶的信息。如果您想以其他用戶身份登錄,則需要先使用GoogleConnect.doLogout()方法註銷。