最近自己摸索了如何接入QQ SDK 其实接入SDK 我认为最麻烦的地方在于AndroidManifest如何修改
废话不多说 进入正题:
首先去官网下载QQ官方SDK:
https://wiki.connect.qq.com/
下载完后 我们创建一个新的Android Studio 包名 看你自己需要进行填写
进入后界面如下
打开 build.gradle
我这边显示这样 接着修改成:
修改完记得点击 sync now 更新
接着我们将unity的jar包导入: 路径位于
G:\unity2017\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes
以及 QQ官方下载的SDK中open_sdk_r6019_lite.jar 导入libs文件夹下
如图:
接着右键将jar添加进依赖中
为了确定是否添加成功可以在build.gradle中看到
红框显示就是我已经将jar添加进去了
接着我们把视图设置为Android
接着我们修改MainActivity 路径在
具体如何修改可以参照官方给的案例
https://wiki.connect.qq.com/qq%E7%99%BB%E5%BD%95
我最后修改后的代码如下:
package com.ghyedu.tencent2;
import com.tencent.open.utils.HttpUtils;
import com.tencent.tauth.IRequestListener;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
import com.unity3d.player.UnityPlayerActivity;
import android.os.Bundle;
import org.apache.http.conn.ConnectTimeoutException;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException;
public class MainActivity extends UnityPlayerActivity {
private Tencent mTencent;
private String appId = ""; //你的appId 需要在官方申请
private String scope = "all"; //这个具体参数 请查阅官方文档 我也不是很清楚
private BaseUiListener listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void init(){
mTencent = Tencent.createInstance(appId,this.getApplicationContext());
}
public void login()
{
if (!mTencent.isSessionValid())
{
mTencent.login(this, scope,listener);
}
}
private class BaseUiListener implements IUiListener {
@Override
public void onComplete(Object response) {
doComplete((JSONObject)response);
}
protected void doComplete(JSONObject values) {
}
@Override
public void onError(UiError e) {
}
@Override
public void onCancel() {
}
}
private class BaseApiListener implements IRequestListener {
@Override
public void onComplete(final JSONObject response) {
doComplete(response);
}
protected void doComplete(JSONObject response) {
}
@Override
public void onIOException(final IOException e) {
}
@Override
public void onMalformedURLException(final MalformedURLException e) {
}
@Override
public void onJSONException(final JSONException e) {
}
@Override
public void onConnectTimeoutException(ConnectTimeoutException arg0) {
// TODO Auto-generated method stub
}
@Override
public void onSocketTimeoutException(SocketTimeoutException arg0) {
// TODO Auto-generated method stub
}
//1.4版本中IRequestListener 新增两个异常
@Override
public void onNetworkUnavailableException(HttpUtils.NetworkUnavailableException e){
// 当前网络不可用时触发此异常
}
@Override
public void onHttpStatusException(HttpUtils.HttpStatusException e) {
// http请求返回码非200时触发此异常
}
@Override
public void onUnknowException(Exception e) {
// 出现未知错误时会触发此异常
}
}
}
接着我们Make 模块 如图
接着我们把app\build\intermediates\packaged-classes\debug下面的classes.jar 拿出来
现在我们请出unity 新建项目切换android平台 在把 我们拿出来的jar 和 官方的jar 以及AndroidManifest 文件放在Plugins/Android/下
如图
接着我们需要修改AndroidManifest 文件 打开后默认如图
最后修改完后为
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.GHYEdu.QQSDK">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
tools:replace = "android:icon"
android:label="QQSDK"
android:icon = "@drawable/app_icon"
android:allowBackup="true"
android:supportsRtl="true">
<uses-library android:name="org.apache.http.legacy" android:required="false" />
<activity android:name="com.ghyedu.tencent2.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
<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="tencent101753906" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="behind"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
</application>
<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="25" />
</manifest>
package 后面的包名填写Unity打包的包名即可
android:label=“QQSDK” 是应用的名称
需要修改成自己的appId
接着我们就可以写个简单的脚本来测试了
最后unity 场景如下
QQSDK 代码如下
using UnityEngine;
using UnityEngine.UI;
public class QQSDK : MonoBehaviour
{
private AndroidJavaObject jo;
private AndroidJavaClass jc;
public Button loginBtn;
private void Awake()
{
jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
loginBtn.onClick.AddListener(OnLoginClick);
}
private void Start()
{
jo.Call("init");
}
private void OnLoginClick()
{
Debug.Log("点击登录");
jo.Call("login");
}
}
然后接着设置Build Settings 中的Build System 需要设置为Gradle
然后设置Player Settings 我的设置如下
需要用自己的签名 没有的话就自己去创建
设置完就可以build了
然后安装在手机上
我直接用我的手机测试 最后效果如下
有什么问题请QQ找我 备注说明原因 否则不加