作为一个新手做准备工作的时候,在网上找了很多例子,发现其中有很多例子是有错误的,各种花式报错,好在最后终于成功了,在此记录一下自己接入QQSDK的过程。
安装JDK,并配置环境变量,这里分享个链接给大家作参考http://jingyan.baidu.com/article/3ea51489e1c2b752e61bbad0.html.
安装eclipse,安装ADT插件和android SDK插件。
从eclipse官网上下载的eclipse-inst-win64.exe只是一个安装程序。双击后选择第二个Eclipse IDE for Java EE Developers.
接着选择安装目录 ,点击INSTALL
安装完成后点击 LAUNCH 进入下面这个画面,给eclipse选择一个工程存放目录后,点击Launch.
进入下面这个画面后,我们要给eclipse安装ADT插件。
点击Help->Install New Software…
ADT可以在线安装,也可以离线安装。但是在线安装需要科学上网。所以这里我们选择离线安装,就要用到之前我们下载的ADT插件。
点击Add,弹出Add Repository界面,Name可以随便取名字,而Location则点击Archive..从目录中找到并选择ADT压缩包。
点击OK后,在软件对话框中,选中”Developer Tools”复选框,然后点击”Next”。 这时候关键的一点,点击Next后,如果下面的进度条一直不动,说明它还是进行了在线安装,那么就需要断网后再点击Next。
点击Next
同意协议后,点击Finish。
这里会弹出一个提醒,点击Install anyway,然后要求你重启eclipse,点击重启。
Eclipse重启之后会根据目录的位置智能地和它相同目录下Android sdk进行关联,如果Eclipse没有自动关联Android sdk的安装目录,那么就会弹出如下图所示的提示信息,要求我们设置Android SDK的安装目录
点击【Open Preferences】按钮,在弹出面板中就会看到Android设置项,填上安装的SDK路径,则会出现刚才在SDK中安装的各平台包,按OK完成配置。
到此eclipse的安装与配置已经完成了。
创建android 工程:关闭Welcome页面。点击New->Peoject…选择Android->Android Application Project 点击Next.
Application Name和Project Name可以随便起名字。但是Package Name(包名)要跟Unity里面写的一样。下面SDK的选择最好也要跟Unity一样。一直点击Next,最后点击Finish.
然后将android SDK里面的open_sdk_r6008_lite.jar放入android项目中的libs文件夹中,然后右击它,选择Build Path->Add to Build Path。
因为需要跟Unity交互,我们需要Unity的jar文件,在Unity安装目录下找到它,放入android项目中的libs文件夹中,然后右击它,选择Build Path->Add to Build Path。
现在我们开始配置AndroidManifest.xml文件,里面内容都是参考QQ开放平台里面的案例,这里就不做解释了。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zsj.unitygame"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="27" />
<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" />
<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="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
<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" />
//这里填写的是QQ开发平台上自己申请的APPID。
<data android:scheme="tencent100371282" />
intent-filter>
activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
application>
manifest>
AndroidManifest.xml文件配置完成后,开始编写Java代码,代码方面也是参考QQ开放平台的,这里不做解释了,需要的同学请自己去QQ开放平台查看API。
//添加头文件
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.os.SystemClock;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;
import org.json.JSONObject;
import com.tencent.connect.UnionInfo;
import com.tencent.connect.UserInfo;
import com.tencent.connect.common.Constants;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.UiError;
import com.tencent.tauth.Tencent;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
//这里要注意把Activity改成UnityPlayerActivity
public class MainActivity extends UnityPlayerActivity {
public static Tencent mTencent;
public SharedPreferences sharedPrefrences;
public Editor editor;
public Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
}
//登录方法
public void LoginAndSend()
{//定义一个对象,里面的第一个参数是自己在QQ开放平台上申请的APPID。
mTencent = Tencent.createInstance("100371282",this.getApplicationContext());
if (!mTencent.isSessionValid())
{
mTencent.login(this, "all", loginListener);
}
}
public static void initOpenidAndToken(JSONObject jsonObject) {
try {
String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
&& !TextUtils.isEmpty(openId)) {
mTencent.setAccessToken(token, expires);
mTencent.setOpenId(openId);
}
} catch(Exception e) {
}
}
IUiListener loginListener = new BaseUiListener() {
@Override
protected void doComplete(JSONObject values) {
initOpenidAndToken(values);
}
};
@Override //这段代码非常重要,不加的话无法获取回调
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Constants.REQUEST_LOGIN ||
requestCode == Constants.REQUEST_APPBAR) {
Tencent.onActivityResultData(requestCode,resultCode,data,loginListener);
}
super.onActivityResult(requestCode, resultCode, data);
}
private class BaseUiListener implements IUiListener {
@Override
public void onComplete(Object response) {
if (null == response) {
return;
}
JSONObject jsonResponse = (JSONObject) response;
if (null != jsonResponse && jsonResponse.length() == 0) {
return;
}
doComplete((JSONObject) response);
}
protected void doComplete(JSONObject values) {
}
@Override
public void onError(UiError e) {
}
@Override
public void onCancel() {
}
}
}
接着我们要从eclipse中导出jar文件。选择整个项目,右击点击,在目录中选择Export,弹出选框后选择java->JAR file.点击继续
清除所有选项,只选择src,libs,res三个文件夹,同时libs文件中classes要取消掉,不然在unity里面打包会报错。在下面选择打包地址和名字,然后点击Finsih,获得一个test.jar文件。
在unity里面创建一个安卓项目。
在Assests 中新建Floder命名为“Plugins”,在“Plugins”文件夹中新建Floder命名为“Android” ,在“Android”文件夹新建Floder命名为”bin”,并将刚刚导出的test.ja文件和open_sdk_r6008_lite.jar文件放入此文件夹中。再将Eclipse 的Android项目中复制res文件夹和AndroidManifest.xml一并放入“Android”文件夹中。
在unity中创建一个脚本,并挂在摄像机上。脚本内容如下。
using UnityEngine;
using System.Collections;
public class test : MonoBehaviour
{
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0)) //在Unity中左键一点击,就执行android中的LoginAndSend方法
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic("currentActivity");
jo.Call("LoginAndSend");
}
}
}
配置Unity安卓环境,要保证跟 eclipse中创建的安卓环境一样。
完成以上步骤后,就可以开始打包APK文件了。在模拟器中安装。
点击一下鼠标,拉取授权~~~~
成功了拉取到授权~~~