1. 程式人生 > >關於Android Studio第三方登入(使用QQ登入)程式碼

關於Android Studio第三方登入(使用QQ登入)程式碼

關於Android Studio第三方登入(使用QQ登入)

新手上路,寫的不好或者有錯誤之處請各位大神多多指教!!!

現在很多APP應用都實現了第三方登入:比如QQ登入、微信登入、微博登入等等。其實實現起來非常簡單,那麼廢話就不多說了,接下來我們看看如何實現第三方登入。

1.首先我們需要到騰訊開發平臺區申請一個開發者的賬號,申請好了後登入。點選建立應用一步步往下就會獲取到:APP ID:1105345875和APP KEY:********(很重要哦APP_ID)

2.QQ登入第三方SDK下載地址:

Android_API呼叫說明:

3.點選下載Android版本的SDK。下載好後解壓複製jar檔案裡面的mta-sdk-1.6.2.jar和open_sdk_r5509.jar放到AS專案中的libs資料夾下。然後選中這兩個jar包,右鍵Add Library新增庫,這樣就可以呼叫SDK的程式碼了。

4.點選:AndroidManifest.xml檔案,新增uses-permission如下程式碼:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.jack.keep">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- SDK2.1新增獲取使用者位置資訊 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher_0"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".LinkUrlActivity"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ZhuCeActivity"
/>
<activity
android:name="com.example.jack.keep.DengLvActivity"
 />
<!--QQ SDK 必須寫-->
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true">
<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="1105345875" />
</intent-filter>
</activity>
</application>

</manifest>

5.佈局檔案程式碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF666771"
android:orientation="vertical"
tools:context="com.example.jack.keep.DengLvActivity">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="40dp">

<ImageView
android:layout_width="40dp"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:src="@mipmap/return_up" />

<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:gravity="center"
android:text="登陸"
android:textColor="@color/white"
android:textSize="18sp" />
</RelativeLayout>

<TextView
android:layout_width="match_parent"
android:layout_height="30dp"
android:visibility="invisible" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@drawable/bianjibag"
android:orientation="horizontal">

<LinearLayout
android:id="@+id/ll01"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:orientation="horizontal">

<ImageView
android:layout_width="30dp"
android:layout_height="wrap_content"
android:paddingLeft="2.5dp"
android:paddingRight="2.5dp"
android:src="@mipmap/ic_launcher" />

<TextView
android:layout_width="30dp"
android:layout_height="match_parent"
android:gravity="center"
android:text="+86"
android:textSize="12sp" />
</LinearLayout>

<ImageView
android:layout_width="2dp"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:background="@color/blue" />

<EditText
android:id="@+id/et01"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"
android:cursorVisible="true"
android:gravity="center|left"
android:hint="請輸入手機就號碼"
android:inputType="number"
android:singleLine="true" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="20dp"
android:background="@drawable/bianjibag"
android:orientation="horizontal">

<ImageView
android:layout_width="30dp"
android:layout_height="wrap_content"
android:paddingLeft="2.5dp"
android:paddingRight="2.5dp"
android:src="@mipmap/ic_launcher" />

<TextView
android:layout_width="30dp"
android:layout_height="match_parent"
android:gravity="center"
android:text="密碼"
android:textSize="12sp" />

<ImageView
android:layout_width="2dp"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:background="@color/blue" />

<EditText
android:id="@+id/et02"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"
android:cursorVisible="true"
android:gravity="center|left"
android:hint="請輸入手機就號碼"
android:inputType="numberPassword"
android:singleLine="true" />


</LinearLayout>

<Button
android:id="@+id/denglv"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="20dp"
android:background="@drawable/btnbg"
android:text="登陸"
android:textColor="@color/white" />

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_margin="10dp">

<TextView
android:id="@+id/zhuce"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:text="註冊" />

<TextView
android:id="@+id/wangjimima"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:gravity="center"
android:text="忘記密碼?" />
</RelativeLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="56dp"
android:orientation="horizontal">

<ImageView
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1"
android:background="@color/blue" />

<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:gravity="center"
android:text="其他方式登陸"
android:textColor="@color/white"
android:textSize="14sp" />

<ImageView
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1"
android:background="@color/blue" />
</LinearLayout>

<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<RadioButton
android:id="@+id/radio01"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:layout_weight="1"
android:background="@mipmap/share_qqbtn"
android:button="@null"
android:checked="false"
android:gravity="center" />

<RadioButton
android:id="@+id/radio02"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:layout_weight="1"
android:background="@mipmap/share_wechatbtn"
android:button="@null" />
</RadioGroup>

<ImageView
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_margin="10dp"
android:layout_marginTop="20dp"
android:background="@color/blue" />

</LinearLayout>

6.登入介面程式碼:

public class DengLvActivity extends AppCompatActivity implements View.OnClickListener{
private EditText user;//使用者名稱
private EditText pw;//密碼
private RadioButton qqRadio;//QQ登入
private RadioButton weixingRadio;//微信登入
private Button startBtn;

private static final String TAG = DengLvActivity.class.getName();//獲取當前的名字
//tencent sdk原始碼
private Tencent mTencent;
private IUiListener loginListener;
private IUiListener userInfoListener;
private String scope;
private UserInfo userInfo;
private final String APP_ID = "1105345875";// 測試時使用,真正釋出的時候要換成自己的APP_ID

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//設定全屏
setContentView(R.layout.activity_deng_lv);
initviews();
initdatas();
}

//銷燬QQ登入
@Override
protected void onDestroy() {
if (mTencent != null) {
mTencent.logout(DengLvActivity.this);
}
super.onDestroy();
}

/**
 * 初始化資料
 */
String userName;
String userPw;
private void initdatas() {
//獲取使用者名稱和密碼
userName=user.getText().toString();
userPw=pw.getText().toString();
if(TextUtils.isEmpty(userName)&&TextUtils.isEmpty(userPw)){
Toast.makeText(this, "請輸入內容", Toast.LENGTH_SHORT).show();
}else {
startActivity(new Intent(DengLvActivity.this, MainActivity.class));
}

//
mTencent = Tencent.createInstance(APP_ID, DengLvActivity.this);
//要所有許可權,不用再次申請增量許可權,這裡不要設定成get_user_info,add_t
scope = "all";
loginListener = new IUiListener() {
@Override
public void onError(UiError arg0) {
// TODO Auto-generated method stub
}

@Override
public void onComplete(Object value) {
// TODO Auto-generated method stub
System.out.println("有資料返回..");
if (value == null) {
return;
}
try {
JSONObject jo = (JSONObject) value;

String msg = jo.getString("msg");

System.out.println("json=" + String.valueOf(jo));

System.out.println("msg="+msg);
if ("sucess".equals(msg)) {
Toast.makeText(DengLvActivity.this, "登入成功",
Toast.LENGTH_LONG).show();

String openID = jo.getString("openid");
String accessToken = jo.getString("access_token");
String expires = jo.getString("expires_in");
mTencent.setOpenId(openID);
mTencent.setAccessToken(accessToken, expires);
}
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void onCancel() {
// TODO Auto-generated method stub
}
};
userInfoListener = new IUiListener() {
public void onError(UiError arg0) {
// TODO Auto-generated method stub
}
@Override
public void onComplete(Object arg0) {
// TODO Auto-generated method stub
if(arg0 == null){
return;
}
try {
JSONObject jo = (JSONObject) arg0;
int ret = jo.getInt("ret");
System.out.println("json=" + String.valueOf(jo));
if(ret == 100030){
//許可權不夠,需要增量授權
Runnable r = new Runnable() {
public void run() {
mTencent.reAuth(DengLvActivity.this, "all", new IUiListener() {
@Override
public void onError(UiError arg0) {
// TODO Auto-generated method stub
}
@Override
public void onComplete(Object arg0) {
// TODO Auto-generated method stub
}
@Override
public void onCancel() {
// TODO Auto-generated method stub
}
});
}
};
DengLvActivity.this.runOnUiThread(r);
}else{
String nickName = jo.getString("nickname");
String gender = jo.getString("gender");

Toast.makeText(DengLvActivity.this, "你好," + nickName, Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void onCancel() {
// TODO Auto-generated method stub
}
};

}
//qq登入方法
private void login() {
if (!mTencent.isSessionValid()) {
mTencent.login(DengLvActivity.this, scope, loginListener);
}
}
//在某些低端機上呼叫登入後,由於記憶體緊張導致APP被系統回收,登入成功後無法成功回傳資料。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Constants.REQUEST_API) {
if (resultCode == Constants.REQUEST_LOGIN) {
Tencent.handleResultData(data, loginListener);
}
super.onActivityResult(requestCode, resultCode, data);
}
}

/**
 * 初始化元件
 */
private void initviews() {
user= (EditText) findViewById(R.id.et01);
pw= (EditText) findViewById(R.id.et02);
startBtn= (Button) findViewById(R.id.denglv);
qqRadio = (RadioButton) findViewById(R.id.radio01);//qq登入按鈕
//qqRadio進行監聽
qqRadio.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
System.out.println("點選並使用qq登入按鈕");
login();
}
});
}

}

程式碼到這裡就完結了!!!執行OK效果圖如下:

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述