1. 程式人生 > >Android開發技巧之:QQ第三方登入(一)

Android開發技巧之:QQ第三方登入(一)

使用的是Android_SDK_V2.9.1,建議使用最新版;

官方下載:SDK下載

 Android studio 中新增


然後在點選build.gradle檔案新增

配置AndroidManifest

在應用的AndroidManifest.xml增加配置的<application>節點下增加以下配置(注:不配置將會導致無法呼叫API);

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


//如果測試機連的是WiFi還要加入以下許可權:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<application>
<activity
android:name="com.tencent.tauth.AuthActivity" 
android:noHistory="true" 
android:launchMode="singleTask" >
<intent-filter>

<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencent你的AppId" />
</intent-filter>
</activity>

<application>

SDK_V2.0引入了AssistActivity,開發者需在androidManifest.xml中註冊。程式碼如下:

<activity android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize" 
/>



在.xml中:
<Button
    android:id="@+id/btn_qq_login"
    android:layout_width="0dp"
    android:layout_height="40dp"
    android:layout_weight="1"
    android:background="@drawable/border_login"
    android:gravity="center"
    android:onClick="login"
    android:text="QQ授權登入"
    android:textColor="@color/white"
    android:textSize="20dp" />
<TextView
    android:id="@+id/tv_json"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />
在MainActivity中:

private String APP_ID="xx";
private Tencent mTencent;

 
private TextView tvInfor;
@Override protected void onCreate(Bundle savedInstanceState) {  
 super.onCreate(savedInstanceState);    
setContentView(R.layout.activity_login);   
 mTencent=Tencent.createInstance(APP_ID,LoginActivity.this);

 

 
textView= (TextView) findViewById(R.id.tv_json);
}
public void login(View view) {   
 switch (view.getId()) {        
	case R.id.btn_common_login:            
	  break;       
 	 case R.id.btn_qq_login:            
		loginForQQ();           
	   break;    }
}
private void loginForQQ() {   
 mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());   
 if (!mTencent.isSessionValid()) {       
 IUiListener iUiListener=new BaseUiListener(){          
  @Override            
  protected void doComplete(JSONObject values) {
		textView.setText(values.toString());
} };  
 mTencent.login(this, "all", iUiListener);    }}
/** * 呼叫SDK封裝好的藉口,需要傳入回撥的例項 會返回伺服器的訊息 */
private class BaseUiListener implements IUiListener {    
@Override    
public void onComplete(Object response) {        
doComplete((JSONObject) response);    }   
 /**     * 處理返回的資料,將JSONObject轉成其他資料格式    
 * @param values    
 */   
 protected void doComplete(JSONObject values) {    }   
 @Override    
public void onError(UiError e) {       
 Toast.makeText(LoginActivity.this, e.toString(), Toast.LENGTH_LONG).show();    }   
 @Override    
public void onCancel() {       
 Toast.makeText(LoginActivity.this, "cancel", Toast.LENGTH_LONG).show();    }}
 
 
public void logout() {    mTencent.logout(this);}
@Override// 如果要成功接收到回撥,需要在呼叫介面的Activity的onActivityResult方法中增加//mTencent.onActivityResult(requestCode, resultCode, data);
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
   mTencent.onActivityResult(requestCode, resultCode, data);}
這樣就已經實現授權登入了,只是沒有將JSONObject轉換成其他資料顯示出來!


授權錯誤:

110201     未登陸 110405     登入請求被限制 110404     請求引數缺少appid 110401     請求的應用不存在 110407     應用已經下架 110406     應用沒有通過稽核     //沒有通過稽核的應用只能被授權建立應用的QQ賬號登入 100044     錯誤的sign 110500     獲取使用者授權資訊失敗 110501     獲取應用的授權資訊失敗 110502     設定使用者授權失敗 110503     獲取token失敗 110504     系統內部錯誤
 Android qq第三方登入(二)