Unity实战篇 | unity接入QQ登录 详细过程——配置Android端的环境和代码
【摘要】 @[toc] 📢前言在项目中接入 QQ登录 是一件很常见的事情。所以用这一篇文章来做一个简单的 接入QQ登录 的案例用来学习。本文会从怎样获取SDK开始讲起,一起来看看吧! 第2️⃣步:配置Android端的环境和代码拿到APPID之后我们用Android Studio创建一个应用。 创建应用老规矩,新建项目,修改名字和路径,准备开始!这里有一个注意的点,就是勾选上图中的 Use lega...
@[toc]
📢前言
- 在项目中接入
QQ登录
是一件很常见的事情。 - 所以用这一篇文章来做一个简单的
接入QQ登录
的案例用来学习。 - 本文会从怎样获取SDK开始讲起,一起来看看吧!
第2️⃣步:配置Android端的环境和代码
拿到APPID之后我们用Android Studio创建一个应用。
创建应用
老规矩,新建项目,修改名字和路径,准备开始!
这里有一个注意的点,就是勾选上图中的 Use legacy android.support libraries
因为我在测试的时候,未勾选这个老是提示support包报错,勾选上就没事了,这个问题应该是Android Studio版本问题,注意一下就好了!
接入Unity的classes.jar包 和 QQ SDK中的jar
- 把Unity的class接入,路径在安装Unity客户端的路径下。
Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
- 把Unity的jar包复制到AS的libs目录下,QQ SDK中的jar则是在我们下载的压缩包的lib文件夹中。
- 如下图所示:
然后选中两个jar包,右键Add As Libray…
,等待编译完就好了
编写QQ登录的脚本,直接在Mainactivity类上修改
有一个注意的点,就是将 APPID
换成我们在开发者平台自己创建的那个即可。
完整代码如下:
package com.example.qqlogin;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
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;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
}
//unity调用的登录方法
public void LoginQQ()
{//定义一个对象,里面的第一个参数是自己在QQ开放平台上申请的APPID。
mTencent = Tencent.createInstance("申请的APPID",this.getApplicationContext());
if (!mTencent.isSessionValid())
{
mTencent.login(this, "all", loginListener);
}
}
//登陆成功设置token和openid 这两个值用于服务器校验账号或者相关逻辑
public 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);
}
Log.e("initOpenidAndToken",jsonObject.toString());
} catch(Exception e) {
System.out.println(e.toString());
}
}
//登陆成功回调
IUiListener loginListener = new BaseUiListener() {
@Override
protected void doComplete(JSONObject values) {
initOpenidAndToken(values);//上面设置token和openid的
GetInfo();//获取个人信息的函数
}
};
//获取个人信息
public void GetInfo(){
Log.e("GetInfo","GetInfo");
UserInfo info = new UserInfo(MainActivity.this, mTencent.getQQToken());
info.getUserInfo(new IUiListener() {
@Override
public void onComplete(Object object) {
Log.e("onComplete", "个人信息:" + object.toString());
try {
String nickname = ((JSONObject) object).getString("nickname");
UnityPlayer.UnitySendMessage("GameManager","AndroidCallBack",nickname);//向Unity发送回调信息
} catch (JSONException e) {
}
}
@Override
public void onError(UiError uiError) {
}
@Override
public void onCancel() {
}
@Override
public void onWarning(int i) {
}
});
}
//重要!回调反馈
@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 (jsonResponse.length() == 0) {
return;
}
doComplete((JSONObject) response);
}
protected void doComplete(JSONObject values) {
}
@Override
public void onError(UiError e) {
}
@Override
public void onCancel() {
}
@Override
public void onWarning(int i) {
}
}
}
修改AndroidManifest文件
在AndroidManifest中加入下面一行代码,别忘记修改成自己申请的APPID。
<meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
完整代码如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testqq">
<application
android:allowBackup="true"
android:label="QQLogin"
android:supportsRtl="true">
<activity android:name=".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: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="申请的APPID" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
</application>
<uses-permission android:name="android.permission.INTERNET" />
<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" />
</manifest>
修改build.gradle为aar形式
打开build.gradle,改成library,否则Build的时候会打包成APK形式。
还要把applicationId注释掉,要不然打包会报错。
打包aar
- 好了,如果确定上面一步里的
包名
、APPID
等都填写正确了 - 那在AS端的操作也就算完成了,接下来就是打包成
aar
给Unity使用就好了! - 按照下图所示,先选中这个文件夹,然后
Build - > Make Module “QQLogin.app”
- 开始这三步之前先点击右边那个小按钮编译一下最好!
但在这之前,我们可以先把res文件夹下的 内容都删掉,因为他对我们没有用处。
这个res文件夹是用于在进行Android开发的时候存放一些图片等资源的文件夹
删掉之后,选中app文件夹点击Build
。
然后取出我们的aar文件
,将aar中lib文件夹下的class包删除掉。
Android端的操作就做完了,下面就是在Unity中调用了,一起来接着做,Unity端的就简单多了。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)