2013-11-29 5 views
-1

Я пытаюсь войти с помощью Linkedin. Я попытался следующий код: Linkedin Login android

String linkedinKey = "xxxxxx"; //add your LinkedIn key 
    String linkedinSecret = "xxxxxx"; //add your LinkedIn Secret 

    final LinkedInOAuthService oauthService = LinkedInOAuthServiceFactory.getInstance().createLinkedInOAuthService(linkedinKey,linkedinSecret); 
    final LinkedInApiClientFactory factory = LinkedInApiClientFactory.newInstance(linkedinKey,linkedinSecret); 
    LinkedInRequestToken LinkedinrequestToken = oauthService.getOAuthRequestToken("x-oauthflow-linkedin://callback"); 

    String token = LinkedinrequestToken.getToken(); 
    String tokenSecret = LinkedinrequestToken.getTokenSecret(); 
    String authUrl = LinkedinrequestToken.getAuthorizationUrl(); 




    private static Scanner s; 
    private void logintoLinkedIn() 
{ 
    String pin; 
    HttpContext session = new BasicHttpContext(); 
    session.setAttribute("LINKEDIN_TOKEN", token); 
    session.setAttribute("LINKEDIN_TOKEN_SECRET", tokenSecret); 
    session.setAttribute("LINKEDIN_REQUEST_TOKEN", requestToken); 
    session.setAttribute("LINKEDIN_AUTH_URL", authUrl); 

    s = new Scanner(System.in); 
    pin = s.next(); 
    // String oauthVerifier = LinkedinrequestToken.getParameter("oauth_verifier"); 
    //Pass the requestToken[session.getAttribute("LINKEDIN_REQUEST_TOKEN")] & oauthVerifier to get accesstoken 
    LinkedInAccessToken accessToken = oauthService.getOAuthAccessToken(LinkedinrequestToken, pin); 

    session.setAttribute("LINKEDIN_ACCESS_TOKEN", accessToken); 
    final LinkedInApiClient client = factory.createLinkedInApiClient(accessToken); 
    Person profile = client.getProfileForCurrentUser(EnumSet.of(ProfileField.ID)); 
    Log.d("CurrentUsers Profile-Id >>",profile.getId().toString()); 
} 

Но я получаю сообщение об ошибке:

Logcat:

11-29 07:42:22.990: E/AndroidRuntime(2212): FATAL EXCEPTION: main 
11-29 07:42:22.990: E/AndroidRuntime(2212): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.main.udebate/com.main.udebate.Login}: com.google.code.linkedinapi.client.oauth.LinkedInOAuthServiceException: oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: null 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at android.os.Looper.loop(Looper.java:137) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at java.lang.reflect.Method.invoke(Method.java:511) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at dalvik.system.NativeStart.main(Native Method) 
11-29 07:42:22.990: E/AndroidRuntime(2212): Caused by: com.google.code.linkedinapi.client.oauth.LinkedInOAuthServiceException: oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: null 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at com.google.code.linkedinapi.client.oauth.LinkedInOAuthServiceImpl.getOAuthRequestToken(LinkedInOAuthServiceImpl.java:180) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at com.main.udebate.Login.<init>(Login.java:95) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at java.lang.Class.newInstanceImpl(Native Method) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at java.lang.Class.newInstance(Class.java:1319) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at android.app.Instrumentation.newActivity(Instrumentation.java:1054) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  ... 11 more 
11-29 07:42:22.990: E/AndroidRuntime(2212): Caused by: oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: null 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:214) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at oauth.signpost.AbstractOAuthProvider.retrieveRequestToken(AbstractOAuthProvider.java:69) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at com.google.code.linkedinapi.client.oauth.LinkedInOAuthServiceImpl.getOAuthRequestToken(LinkedInOAuthServiceImpl.java:172) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  ... 16 more 
11-29 07:42:22.990: E/AndroidRuntime(2212): Caused by: android.os.NetworkOnMainThreadException 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at java.net.InetAddress.getAllByName(InetAddress.java:214) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at oauth.signpost.basic.DefaultOAuthProvider.sendRequest(DefaultOAuthProvider.java:48) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:177) 
11-29 07:42:22.990: E/AndroidRuntime(2212):  ... 18 more 
11-29 07:47:23.132: I/Process(2212): Sending signal. PID: 2212 SIG: 9 

Пожалуйста, может кто-то помочь мне с этим.

Спасибо,

ответ

0

Вы должны сделать в следующем образом общаться с Linkedin API: Шаг 1:

Получить булавку с помощью API

oauthService= LinkedInOAuthServiceFactory.getInstance().createLinkedInOAuthService(consumerKeyValue, consumerSecretValue); 
    requestToken= oauthService.getOAuthRequestToken(); 
    //requestToken=oauthService.getOAuthRequestToken(); 
    //getOAuthRequestToken(""); 
    autoToken= requestToken.getToken(); 
    authoTokenSecret = requestToken.getTokenSecret(); 
    authUrl= requestToken.getAuthorizationUrl(); 
    Log.i("Tok", autoToken); 
    Log.i("Tok", authoTokenSecret); 
    Log.i("Tok", authUrl); 

    webview.loadUrl(authUrl); 

Шаг 2:

webview покажет булавку после lo наю связаны теперь использовать свой палец, чтобы получили маркер доступа и использование маркеров доступа вы можете получить профиль и обновления статус

String pin = pin_edit.getText().toString(); 
    System.out.println("Fetching access token from LinkedIn...");   
    LinkedInAccessToken accessToken = oauthService.getOAuthAccessToken(requestToken, pin); 
    System.out.println("Access token: " + accessToken.getToken()); 
    System.out.println("Token secret: " + accessToken.getTokenSecret()); 
    final LinkedInApiClientFactory factory = LinkedInApiClientFactory.newInstance(consumerKeyValue, consumerSecretValue); 
    final LinkedInApiClient client = factory.createLinkedInApiClient(accessToken); 

    Person profile = client.getProfileForCurrentUser(); 
    profile.setCurrentStatus("Hello all my friends ,I am missing you all"); 
    client.updateCurrentStatus("Hello all going"); 
+0

что pin_edit я не хочу любой edittext – asifa

+0

использует ваш контакт для доступа к токену и используя токен доступа, вы можете получить статус профиля и обновления – Imran

+0

, но что такое pin_edit. У меня нет веб-просмотра. Мне нужно внести изменения в xml-файл. – asifa

1

Помимо ошибок, связанных с вашего уведомлением аутентификации Linkedin журнал говорит "вызвано следующими причинами: андроид. os.NetworkOnMainThreadException ". Вы делаете запрос к серверу в своем основном действии, что не так, поскольку ваше основное действие будет выглядеть так, как будто оно застревает у пользователей, даже если ваше приложение извлекает информацию в фоновом режиме. Вместо этого используйте AsyncTask. выписка документация: http://developer.android.com/reference/android/os/AsyncTask.html

3

Создание нового приложения в Developer счет LinkedIn

Перейти к https://www.linkedin.com/developer/apps и нажмите на кнопку «Создать приложение». Откроется форма, которую необходимо заполнить для дальнейшего продолжения.

Перейдите на страницу https://developer.linkedin.com/docs/android-sdk и скачайте Мобильный SDK для Android.

Разархивируйте файл и добавьте в свой файл папку linkedin-sdk.

Добавление Linkedin-SDK в depencencies

компиляции проекта (': LinkedIn-SDK')

Добавить сгенерированный ключ HASK в ш щ э учетной записи разработчика

Перейти к https://www.linkedin.com/developer/apps выберите ваш имя приложения и перейдите на вкладку Mobile. Добавьте имя пакета и сгенерированный хэш-ключ в приложении LinkedIn. Этот хэш-ключ будет аутентифицировать ваше мобильное приложение.

Используйте следующий код в MainActivity. Используя этот код, вы можете генерировать ключ hask. Сначала добавьте хеш-ключ в свою связанную с собой учетную запись разработчика, затем войдите в систему.Если когда-то проверка подлинности приложение с удалением метода LinkedIn generateHashkey() (нет необходимости снова)

import android.app.Activity; 
import android.content.Intent; 
import android.content.pm.PackageInfo; 
import android.content.pm.PackageManager; 
import android.content.pm.Signature; 
import android.os.Bundle; 
import android.util.Base64; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.linkedin.platform.LISessionManager; 
import com.linkedin.platform.errors.LIAuthError; 
import com.linkedin.platform.listeners.AuthListener; 
import com.linkedin.platform.utils.Scope; 

import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 

public class MainActivity extends Activity { 
    private static final String TAG = MainActivity.class.getSimpleName(); 
    public static final String PACKAGE = "com.android.app"; 
              // your package name 

    Button login_linkedin_btn; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     generateHashkey(); 

     login_linkedin_btn = (Button) findViewById(R.id.login_button); 
     login_linkedin_btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       login_linkedin(); 
      } 
     }); 
    } 

    // Authenticate with linkedin and intialize Session. 

    public void login_linkedin(){ 
     LISessionManager.getInstance(getApplicationContext()).init(this, buildScope(), new AuthListener() { 
      @Override 
      public void onAuthSuccess() { 

       // Toast.makeText(getApplicationContext(), "success" + LISessionManager.getInstance(getApplicationContext()).getSession().getAccessToken().toString(), Toast.LENGTH_LONG).show(); 

      } 

      @Override 
      public void onAuthError(LIAuthError error) { 

       Toast.makeText(getApplicationContext(), "failed " + error.toString(), 
           Toast.LENGTH_LONG).show(); 
      } 
     }, true); 
    } 

    // After complete authentication start new HomePage Activity 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     LISessionManager.getInstance(getApplicationContext()).onActivityResult(this, 
             requestCode, resultCode, data); 
     Intent intent = new Intent(MainActivity.this,UserProfile.class); 
     startActivity(intent); 
    } 

    // generate the hash key 
    public void generateHashkey(){ 
     try { 
      PackageInfo info = getPackageManager().getPackageInfo(
        PACKAGE, 
        PackageManager.GET_SIGNATURES); 
      for (Signature signature : info.signatures) { 
       MessageDigest md = MessageDigest.getInstance("SHA"); 
       md.update(signature.toByteArray()); 

       Log.d("Hask key",Base64.encodeToString(md.digest(), Base64.NO_WRAP)); 

      } 
     } catch (PackageManager.NameNotFoundException e) { 
      Log.d(TAG, e.getMessage(), e); 
     } catch (NoSuchAlgorithmException e) { 
      Log.d(TAG, e.getMessage(), e); 
     } 
    } 

    // This method is used to make permissions to retrieve data from linkedin 

    private static Scope buildScope() { 
     return Scope.build(Scope.R_BASICPROFILE, Scope.R_EMAILADDRESS); 
    } 
} 

Используйте следующий код для UserProfile.java

import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.linkedin.platform.APIHelper; 
import com.linkedin.platform.LISessionManager; 
import com.linkedin.platform.errors.LIApiError; 
import com.linkedin.platform.listeners.ApiListener; 
import com.linkedin.platform.listeners.ApiResponse; 
import com.squareup.picasso.Picasso; 

import org.json.JSONObject; 

public class UserProfile extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    private static final String host = "api.linkedin.com"; 
    private static final String topCardUrl = "https://" + host + "/v1/people/~:" + 
      "(email-address,formatted-name,phone-numbers,public-profile-url,picture-url,picture-urls::(original))"; 
    ProgressDialog progress; 
    ImageView profile_pic; 
    TextView user_name,user_email; 
    NavigationView navigation_view; 
    Button logout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_userprofile); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     logout = (Button) findViewById(R.id.logout); 
     setSupportActionBar(toolbar); 
     progress= new ProgressDialog(this); 
     progress.setMessage("Retrieve data..."); 
     progress.setCanceledOnTouchOutside(false); 
     progress.show(); 
     getUserData(); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, 
       R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     setNavigationHeader(); 
     navigation_view.setNavigationItemSelectedListener(this); 

     // this is used for clear session i.e logout from linkedin 

     logout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       LISessionManager.getInstance(getApplicationContext()).clearSession(); 
       Intent intent = new Intent(UserProfile.this, MainActivity.class); 
       startActivity(intent); 
      } 
     }); 
    } 

    /*Once User's can authenticated, 
     It make an HTTP GET request to LinkedIn's REST API using the currently authenticated user's credentials. 
     If successful, A LinkedIn ApiResponse object containing all of the relevant aspects of the server's response will be returned. 
    */ 

    public void getUserData(){ 
     APIHelper apiHelper = APIHelper.getInstance(getApplicationContext()); 
     apiHelper.getRequest(UserProfile.this, topCardUrl, new ApiListener() { 
      @Override 
      public void onApiSuccess(ApiResponse result) { 
       try { 

        setUserProfile(result.getResponseDataAsJson()); 
        progress.dismiss(); 

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

      } 

      @Override 
      public void onApiError(LIApiError error) { 
       // ((TextView) findViewById(R.id.error)).setText(error.toString()); 

      } 
     }); 
    } 
    /* 
     Set Navigation header by using Layout Inflater. 
    */ 

    public void setNavigationHeader(){ 

     navigation_view = (NavigationView) findViewById(R.id.nav_view); 

     View header = LayoutInflater.from(this).inflate(R.layout.nav_header_user_profile, null); 
     navigation_view.addHeaderView(header); 

     user_name = (TextView) header.findViewById(R.id.username); 
     profile_pic = (ImageView) header.findViewById(R.id.profile_pic); 
     user_email = (TextView) header.findViewById(R.id.email); 
    } 

    /* 
     Set User Profile Information in Navigation Bar. 
    */ 

    public void setUserProfile(JSONObject response){ 

     try { 

      user_email.setText(response.get("emailAddress").toString()); 
      user_name.setText(response.get("formattedName").toString()); 

      Picasso.with(this).load(response.getString("pictureUrl")) 
        .into(profile_pic); 

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

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.user_profile, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.nav_camera) { 
      // Handle the camera action 
     } else if (id == R.id.nav_gallery) { 

     } else if (id == R.id.nav_slideshow) { 

     } else if (id == R.id.nav_manage) { 

     } else if (id == R.id.nav_share) { 

     } else if (id == R.id.nav_send) { 

     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 
} 
Смежные вопросы