2013-07-25 45 views
10

Tôi đã thiết lập đăng nhập facebook đơn giản. Đối với tất cả mọi thứ hoạt động như Android 2.3.6, người dùng sẽ nhận được hộp thoại đăng nhập nhanh chóng, nhập dữ liệu và ứng dụng tiếp tục. Tôi nghĩ rằng đó là phiên bản android lỗi nhưng nó turs ra rằng đăng nhập không hoạt động khi có ứng dụng facebook được cài đặt trên điện thoại!Đăng nhập bằng facebook trên Android không hoạt động với ứng dụng Facebook đã cài đặt

Tested này trên: Galaxy Ace 2.3.6 HTC Desire 4.1.2 Galaxy Note 4.1.2 Android emulator 4.1.2

Ngay cả những mẫu facebook không làm việc!

Mỗi lần ứng dụng được thực hiện -

Nó có vẻ như phiên không được mở ra nhưng tại sao vậy? Theo hướng dẫn này - https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

Code:

Session.openActiveSession(this, true, new Session.StatusCallback() { 

     @Override 
     public void call(final Session session, SessionState state, Exception exception) { 

      if (session.isOpened()) { 

       Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 

        @Override 
        public void onCompleted(GraphUser user, Response response) { 
         if (user != null) { 
          Log.d("Access_token", session.getAccessToken()); 
         } 
        } 
       }); 
      } else { 
       Log.d("SESSION NOT OPENED", "SESSION NOT OPENED"); 
      } 
     } 
    }); 
+0

Tại sao là 'phiên session' cuối cùng? – BLaZuRE

+2

Để tôi có thể lấy mã thông báo truy cập của người dùng bên trong phương thức onComplete! – Karlis

+0

Bạn đã tắt chế độ Hộp cát trong tab thông tin cơ bản của ứng dụng trên trang của nhà phát triển facebook chưa? –

Trả lời

5

Check-out dưới cùng của bước 4: https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

Nếu bạn chưa nhập ứng dụng của bạn chính băm đúng, Facebook đăng nhập thông qua WebView popup (nếu ứng dụng không được cài đặt) sẽ vẫn làm việc, nhưng đăng nhập thông qua ứng dụng Facebook gốc sẽ không.

Bạn sẽ thấy ngoại lệ này trong LogCat:

com.facebook.http.protocol.ApiException: remote_app_id does not match stored id 

Các Facebook SDK in trường hợp ngoại lệ của nó để kiểm tra có anyway nếu có những vấn đề khác.

+0

Đã thử điều này. Tôi nhận được các cửa sổ để đặt permisions nhưng không có gì cho thấy trong LogCat và người dùng không đăng nhập – Karlis

+1

Thực ra đây là vấn đề. Nhưng LogCat Eclipse đã không hiển thị bất kỳ erros nhưng khi tôi chạy adb logcat trong thiết bị đầu cuối nó cho thấy lỗi và nó quay ra rằng tôi đã sao chép mà không có một nhân vật! – Karlis

+0

đã cứu mạng tôi.! –

-1

enter image description here

Disable Sandbox Chế độ ... Điều này sẽ cho phép ứng dụng của bạn để chạy trên tất cả các thiết bị. Hãy thử giải pháp này

+1

Tôi đã tắt chế độ hộp cát! – Karlis

+0

Chế độ Hộp cát không hạn chế những thiết bị có thể chạy ứng dụng, nó chỉ hạn chế ** ai ** có thể sử dụng nó. –

2

Có vẻ như tôi không thể lấy dữ liệu nếu tôi có phiên hoạt động facebook (từ ứng dụng facebook).

Vì vậy, trước khi tôi mở phiên, tôi yêu cầu đăng nhập lực lượng, ngay cả khi người dùng đã mở phiên facebook từ ứng dụng facebook.

openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); 

Vì vậy, bây giờ mọi thứ hoạt động nhưng người dùng phải nhập dữ liệu theo cách thủ công. Nó không lý tưởng nhưng nó hoạt động.

Ngay cả các mẫu facebook không hoạt động đối với tôi khi mở ứng dụng facebook.

Nếu ai đó có giải pháp tốt hơn, vui lòng đề xuất.

0

Nếu khóa băm không được tạo đúng cách thì bạn có thể phải đối mặt với các vấn đề như

Là người gốc nhập Dialog được hiển thị nhưng sau khi chấp nhận các điều khoản sổ popup đi và không có gì xảy ra trong nhật ký mèo

Nhưng Đăng nhập và chia sẻ sẽ hoạt động tốt nếu ứng dụng gốc trên thiết bị bị vô hiệu hóa (Hộp thoại đăng nhập mở ra trong chế độ xem web trong trường hợp này và không yêu cầu khóa băm thích hợp cho việc này)

Tôi đang gặp vấn đề tương tự và giải quyết vấn đề này bằng cách sử dụng mã băm .chìa khóa băm là khác nhau từ một trong những tạo ra sử dụng OpenSSL và keytool

và sau khi cập nhật quan trọng băm này trong ứng dụng Facebook tất cả hoạt động tốt

//================================== To Get Facebook Hash key Programmatically =========================// 
    PackageInfo info; 

    try { 
      info = activity.getPackageManager().getPackageInfo("com.checkmyplanner", PackageManager.GET_SIGNATURES); 
      for (Signature signature : info.signatures) { 
       MessageDigest md; 
       md = MessageDigest.getInstance("SHA"); 
       md.update(signature.toByteArray()); 
       String something = new String(Base64.encode(md.digest(), 0)); 
       //String something = new String(Base64.encodeBytes(md.digest())); 
       Log.e("hash key", something); 
      } 
     } catch (NameNotFoundException e1) { 
      Log.e("name not found", e1.toString()); 
     } catch (NoSuchAlgorithmException e) { 
      Log.e("no such an algorithm", e.toString()); 
     } catch (Exception e) { 
      Log.e("exception", e.toString()); 
     } 

Chỉ cần thay đổi tên gói của bạn và nhận băm đúng chìa khóa

3

Giúp bạn có được khóa băm sử dụng chức năng này cho cả hai (gỡ lỗi và phát hành apk) và đặt nó trong ứng dụng của bạn trong developer.facebook.com/apps

private void calculateHashKey(String yourPackageName) { 
    try { 
     PackageInfo info = getPackageManager().getPackageInfo(
       yourPackageName, 
       PackageManager.GET_SIGNATURES); 
     for (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) { 
     e.printStackTrace(); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
} 

this help me me rất nhiều .. Hy vọng điều này sẽ giúp bạn quá ..

6

tôi đang writting câu trả lời này cho những ai đang sử dụng Facebook SDK 4.X

bạn có thể mở cổng thông tin đăng nhập của facebook ở một trong hai cách sau:

  1. nếu bạn có một thiết bị android với Android 1.9.XFacebook App được cài đặt trong thiết bị gọi Native Login Phương pháp ở đây, bạn không cần phải sử dụng facebook WebView

  2. nếu bạn chưa cài đặt Facebook App trong thiết bị Android của bạn thì đó là tốt để sử dụng WebView

để cho Facebook này cung cấp 3 Constants

  1. NATIVE_ONLY (sử dụng khi bạn muốn mở trong Facebook App chỉ)
  2. WEB_ONLY (chỉ được sử dụng khi bạn muốn mở trong WebView chỉ)
  3. NATIVE_WITH_FALLBACK (Đề nghị Facebook phát hiện và chọn webView nếu ứng dụng không được cài đặt)

Kiểm tra bên dưới liên kết để xem chi tiết https://developers.facebook.com/docs/reference/android/current/class/LoginButton/ https://developers.facebook.com/docs/facebook-login/android/v2.2#troubleshooting

 LoginButton.setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK); 
    LoginButton.setLoginBehavior(LoginBehavior.NATIVE_ONLY); 
    LoginButton.setLoginBehavior(LoginBehavior.WEB_ONLY);