2016-04-28 44 views
0

我設法使用FacebookConnect獲得登錄Facebook的工作。然後,我嘗試提取用戶的姓名和電子郵件地址。我設法得到他們的名字,但他們的電子郵件地址是空白的。我嘗試使用我的Facebook帳戶在其中設置我的電子郵件地址爲公開。我還添加了權限ios.facebook_permissons =「電子郵件」,「public_profile」,「user_birthday」和android的相同。這裏是我的代碼Codename one Facebook的登錄電子郵件= null

登錄

public void facebookLogin() { 
    final Login fb = FacebookConnect.getInstance(); 
    fb.setClientId("964865683621261"); 
      fb.setClientSecret("1fb729a93d96bb8700f2c879f520052b"); 
      fb.setRedirectURI("http://kyven.co.za"); 
      FaceBookAccess.setPermissions(new String[]{"user_birthday", "email", "public_profile"}); 
      fb.setCallback(new LoginCallback(){ 
       @Override 
       public void loginFailed(String errorMessage) { 
        Dialog dg = new Dialog(); 
        dg.setTitle("Login failed"); 
        dg.show(); 
       } 
       @Override 
       public void loginSuccessful() { 
        InfiniteProgress ip = new InfiniteProgress(); 
          ip.setUIID("InfiniteProgress"); 
          final Dialog d = ip.showInifiniteBlocking(); 
        Preferences.set("token", fb.getAccessToken().getToken()); 
        final FacebookData data = new FacebookData(); 
        data.fetchData(Preferences.get("token", (String) null), new Runnable(){ 

         public void run() { 
          String email = data.getEmail(); 
          Dialog.show("hello " + data.getName(), data.getEmail(), "OK", null); 
          String fullName = data.getName(); 
          String[] args = { email, fullName}; 
          String[] keys = { "email", "password"}; 
          int id = postRequest(args, keys, "facebook_login.php"); 
          if (id != 0) { 
           Preferences.set("userId", id); 
           setUpMainPage(); 
           Hashtable meta = new Hashtable(); 
           meta.put(com.codename1.push.Push.GOOGLE_PUSH_KEY, 
            1276); 
           Display.getInstance().registerPush(meta, true); 
          } else { 
           Dialog.show("Error", "There was an error logging you in" 
            + " please try again later", "OK", null); 

           d.dispose(); 
        } 
         } 
        }); 
       } 
      }); 
      fb.doLogin(); 
} 

獲取數據

public class FacebookData implements UserData { 

String name, email; 

public String getName() { 
    return name; 
} 

public String getEmail() { 
    return email; 
} 

public void fetchData(String token, final Runnable callback) { 
    ConnectionRequest req = new ConnectionRequest() { 
      @Override 
      protected void readResponse(InputStream input) throws IOException { 
       JSONParser parser = new JSONParser(); 
       Map<String, Object> parsed = parser.parseJSON(new InputStreamReader(input, "UTF-8")); 
       name = (String) parsed.get("name"); 
       email = (String) parsed.get("email"); 
      } 

      @Override 
      protected void postResponse() { 
       callback.run(); 
      } 

      @Override 
      protected void handleErrorResponseCode(int code, String message) { 

      } 
     }; 
     req.setPost(false); 
     req.setUrl("https://graph.facebook.com/v2.4/me"); 
     req.addArgumentNoEncoding("access_token", token); 
     NetworkManager.getInstance().addToQueue(req); 
} 

} 
+0

@cbroe這是一個Codename一個問題,而不是一個JavaScript問題... –

+0

@ShaiAlmog這是一個通用的API版本問題,並不取決於你使用什麼特定的語言或SDK。副本包含對一般問題的解釋;如何在使用特定的SDK時詢問這些字段是開發人員至今爲止愉快地度過這些更改的時間,現在至少可以自己查閱相關文檔。 – CBroe

回答

-1

https://www.codenameone.com/blog/building-a-chat-app-with-codename-one-part-2.html

當你處理你自己的用戶列表,並在通 註冊用戶登錄,你通常可以問這個用戶什麼。但是,當用戶通過Facebook,Google或任何其他服務登錄時,用戶登錄 就可以得到用戶詳細信息的服務......這是很痛苦的 清除了這樣的服務,甚至不提供電子郵件地址 登錄時爲默認值。有時在Facebook上可訪問,但只有 纔可供用戶選擇隱藏。

通常,Facebook不保證可以訪問用戶的電子郵件地址,並且通常不會提供該信息。您需要使用Facebook ID作爲唯一標識符,如果您沒有收到電子郵件,則需要要求用戶將其提供給您。

+0

那麼我的代碼沒有錯? – Kyri33

+0

該代碼主要針對模擬器,而不適用於通過構建提示指定權限和要求的設備。 –

+0

你好shai,我怎麼能要求用戶獲得獲取電子郵件ID的權限。我有上面的確切代碼和相同的電子郵件問題。在Facebook Api Explorer中,「https://graph.facebook.com/v2.9/me?fields=id,name,email"-此網址也提供電子郵件ID,但如果我將它用於Android設備,則ID&姓名和電子郵件爲空 –

相關問題