2016-01-04 6 views
0

Мы получаем непроверенную ошибку SSL peer, получая токен доступа из Lifelog api. Я могу получить authcode, но когда я пытаюсь получить токен доступа, он дает мне ошибку SSL peer. Он отлично работает с небольшим количеством устройств, но большая часть устройства дает SSL-ошибку.javax.net.ssl.sslpeerunverifiedexception no peer certificate Ошибка в lifelogApi

private void getAccessToken(final String authCode) 
{ 
final String finalUrl = String.format("https://platform.lifelog.sonymobile.com/oauth/2/token?client_id=%s&client_secret=%s&code=%s",CLIENT_ID,CLIENT_SECRET,authCode); 
    Thread networkThread = new Thread(new Runnable() { 
     public void run() { 
      try { 
       HttpClient client = new DefaultHttpClient(); 
       HttpPost post = new HttpPost(finalUrl); 
       // Add your data 
       ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4); 
       nameValuePairs.add(new BasicNameValuePair("client_id", CLIENT_ID)); 
       nameValuePairs.add(new BasicNameValuePair("client_secret", CLIENT_SECRET)); 
       nameValuePairs.add(new BasicNameValuePair("grant_type", "authorization_code")); 
       nameValuePairs.add(new BasicNameValuePair("code", authCode)); 
       AbstractHttpEntity ent=new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8); 
       ent.setContentType("application/x-www-form-urlencoded; charset=UTF-8"); 
       post.setEntity(ent); 
       // Execute HTTP Post Request 
       HttpResponse response =null; 
       try { 
        response = client.execute(post); 
        Log.d("Response:" , response.toString()); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       String dataObject = response.toString(); 
       JSONObject obj; 
       if(dataObject != null) { 
        obj = null; 

        try { 

         String json_string = EntityUtils.toString(response.getEntity()); 
         //  displayToast(json_string); 
         obj = new JSONObject(json_string); 
         SharedPreferences prefs =getSharedPreferences("Myprefs", Context.MODE_PRIVATE); 

         prefs.edit().putString("Access_token", obj.getString("access_token")); 

//       prefs.edit().putString(AUTH_REFRESH_TOKEN, obj.getString(AUTH_REFRESH_TOKEN)); 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
      } 
     } 
    }); 
    networkThread.start(); } 

ответ

0

Проблема может быть связана с использованием HttpClient. Похоже, Google удалил поддержку этого вызова в Android 6.0.

http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client

Вы должны быть в состоянии использовать HttpsURLConnection вместо HTTPClient, чтобы получить доступ к веб-службы Lifelog.

0

Я использую google-oauth-client, я был в состоянии использовать на Android 5.x с этой инициализации для

import com.google.api.client.http.HttpTransport;

private void initializeSocketFactory() { 
    if (Build.VERSION.SDK_INT >= 23) { 
     HTTP_TRANSPORT = new NetHttpTransport(); 
    } else { 
     //Android 5 and bellow needs this SSL Socket factory initialization 
     try { 
      SSLContext sslContext = SSLContext.getInstance("TLSv1"); 
      sslContext.init(null, null, null); 
      SSLSocketFactory socketFactory = sslContext.getSocketFactory(); 
      NetHttpTransport.Builder netTransportBuilder = new NetHttpTransport.Builder(); 
      netTransportBuilder.setSslSocketFactory(socketFactory); 
      HTTP_TRANSPORT = netTransportBuilder.build(); 
     } catch (NoSuchAlgorithmException | KeyManagementException e) { 
      Log.e(LOG_TAG, "Problem instantiating cipher for ssl socket", e); 
     } 
    } 

} 

используется HTTP_TRANSPORT для создания экземпляра:

import com.google.api.client.auth.oauth2.AuthorizationCodeFlow;

 Смежные вопросы

  • Нет связанных вопросов^_^