Android呼び出しサードパーティQQログインコード共有

6274 ワード

本文はみんなのためにQQを呼び出して登録する関連コードを分かち合って、みんなに役に立つことを望んで、プロジェクトの開発の時間を減らして、具体的な内容は以下の通りです
1、QQオープンプラットフォームに行ってアカウントを登録する(http://open.qq.com/)、アプリケーションのためにQQのAPPを申請します_IDをダウンロードし、関連するjarパッケージをプロジェクトのlibディレクトリの下に置きます.
2、Manifest.xmlにQQ関連のActivityを登録し、コードは以下の通りである.

    
 
  
   
   
   
   
  
 

3、QQ提供の関連APIを利用して関連OPENID、ニックネーム、画像などの資料を取得する.ここで注意したいのは、QQサーバがOPENIDやニックネームなどの他の資料を返すのは2段階に分かれているため、まず戻るOPENIDの速度が速く、ニックネームなどの他の資料を返すのが遅い可能性があるため、OPENIDを返す際には、すでにQQログインに成功していると考えられ、ニックネームなどの他の資料情報を非同期で処理していることです.以下はコードの部分で、すでにプロジェクトテストをしたことがあって、直接使うことができます(対応するAPP_IDを交換すればいいです)

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.SocketTimeoutException; 
 
import org.apache.http.conn.ConnectTimeoutException; 
import org.json.JSONException; 
import org.json.JSONObject; 
 
import android.app.Activity; 
 
import com.smart.util.BroadcastAction; 
import com.smart.util.BroadcastUtil; 
import com.smart.util.Constant; 
import com.smart.util.ILog; 
import com.smart.util.PrefUtil; 
import com.smart.util.Prefkey; 
import com.tencent.open.HttpStatusException; 
import com.tencent.open.NetworkUnavailableException; 
import com.tencent.tauth.Constants; 
import com.tencent.tauth.IRequestListener; 
import com.tencent.tauth.IUiListener; 
import com.tencent.tauth.Tencent; 
import com.tencent.tauth.UiError; 
import com.utils.lib.ss.common.ToastHelper; 
 
/** 
 * QQ  。 
 * @author E 
 */ 
public class QqLogin { 
  
 private static QqLogin qqLogin = null; 
  
 public static QqLogin getInstance(){ 
  if (null == qqLogin) { 
   qqLogin = new QqLogin(); 
  } 
  return qqLogin; 
 } 
  
 public void login(Activity context , QqLoginListener loginListener){ 
  //Constant.QQ_APP_ID            APP_ID 
  Tencent tencent = Tencent.createInstance(Constant.QQ_APP_ID, context); 
  if (null == tencent) { 
   ToastHelper.makeText(context, "error cased !"); 
   return; 
  } 
  tencent.login(context, "get_user_info", new BaseUiListener(tencent,loginListener)); 
 } 
  
 class BaseUiListener implements IUiListener{ 
 
  Tencent tencent = null; 
  QqLoginListener qqLoginListener = null; 
   
  public BaseUiListener(Tencent tencent ,QqLoginListener qqLoginListener) { 
   super(); 
   this.tencent = tencent; 
   this.qqLoginListener = qqLoginListener; 
  } 
 
  @Override 
  public void onComplete(JSONObject values) { 
   try { 
    String openid = values.getString("openid"); 
    qqLoginListener.onLoginSuccess(openid); 
    tencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO, null, Constants.HTTP_GET, 
      new BaseApiListener(qqLoginListener) ,null); 
   } catch (Exception e) { 
    e.printStackTrace(); 
   } 
  } 
  @Override 
  public void onError(UiError arg0) { 
   qqLoginListener.onLoginFail(); 
  } 
   
  @Override 
  public void onCancel() { 
   qqLoginListener.onCancel(); 
  } 
 } 
  
 class BaseApiListener implements IRequestListener{ 
   
   QqLoginListener qqLoginListener = null; 
 
  public BaseApiListener(QqLoginListener qqLoginListener) { 
   super(); 
   this.qqLoginListener = qqLoginListener; 
  } 
  @Override 
  public void onComplete(JSONObject jsonObject, Object object) { 
   try { 
    ILog.e(jsonObject.toString()); 
    String nickName = jsonObject.getString("nickname"); 
    String figureurl_qq_1 = jsonObject.getString("figureurl_qq_2"); 
    PrefUtil.instance().setPref(Prefkey.THIRD_NICKNAME, nickName); 
    PrefUtil.instance().setPref(Prefkey.THIRD_IMAGE, figureurl_qq_1); 
    //           
    BroadcastUtil.sendBroadcast(BroadcastAction.UPLOAD_THIRD_INFO); 
   } catch (Exception e) { 
    e.printStackTrace(); 
   } 
  } 
  @Override 
  public void onConnectTimeoutException(ConnectTimeoutException arg0, 
    Object arg1) { 
  } 
  @Override 
  public void onHttpStatusException(HttpStatusException arg0, Object arg1) { 
    
  } 
  @Override 
  public void onIOException(IOException arg0, Object arg1) { 
    
  } 
  @Override 
  public void onJSONException(JSONException arg0, Object arg1) { 
    
  } 
  @Override 
  public void onMalformedURLException(MalformedURLException arg0, 
    Object arg1) { 
  } 
  @Override 
  public void onNetworkUnavailableException( 
    NetworkUnavailableException arg0, Object arg1) { 
  } 
  @Override 
  public void onSocketTimeoutException(SocketTimeoutException arg0, 
    Object arg1) { 
  } 
  @Override 
  public void onUnknowException(Exception arg0, Object arg1) { 
  } 
 } 
  
 /** 
  *      ,         
  */ 
 public static abstract class QqLoginListener{ 
  public void onLoginSuccess(String openid){}; 
  public void onLoginSuccess(String openid, String nickname){}; 
  public void onLoginFail(){}; 
  public void onCancel(){}; 
 } 

さて、裏コード部分まで書き終わったら、login(Activity context,QqLoginListener loginListener)メソッドを呼び出すだけでいいです.
以上がAndroidがサードパーティのログインを呼び出す詳細な手順と考え方であり、皆さんの学習に役立つことを願っています.