前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Unity】QQ登录SDK接入(Unity&Android)

【Unity】QQ登录SDK接入(Unity&Android)

作者头像
bering
发布2019-12-03 11:38:19
2.8K0
发布2019-12-03 11:38:19
举报
文章被收录于专栏:游戏开发之旅

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

前期准备

QQ官方SDK下载 地址:http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD版本为:Android_SDK_V3.3.3 Unity5.3.5f1以上版本 64位 eclipse下载 地址:https://www.eclipse.org/downloads/ Version: Oxygen.3a Release (4.7.3a) 64位 *ADT下载 地址:http://tools.android-studio.org/index.php/adt-bundle-plugin 我这里下载的是ADT-23.0.6(64位) 压缩包下载后不要解压 android SDK 地址:http://tools.android-studio.org/index.php/sdk android SDK下载后,还需要 一系列的配置下载才能使用 JDK下载 地址:http://jdk.android-studio.org/ 版本最好使用1.8以上 1.9以下 同样是64位

eclipse的安装以及SDK,JDk环境的配置这里就不多说了,ADT下载后直接点击Help->Install New Software…

取消左下角updated勾选,点击Add,弹出Add Repository界面,然后点击Archive选择adt文件,之后随意取个名字

一路点击Next完成安装。

接下来New Project新建Android Application project工程

Application Name和Project Name可以随便起名字。但是Package Name(包名)要跟Unity里面写的一样。下面SDK的选择最好也要跟Unity一样。一直点击Next,最后点击Finish.

Minimum Required SDK最好选择android 4.x,不然Unity里面打包可能会报错

然后将在开放平台下载的android SDK里面的open_sdk_r6008_lite.jar,以及opensdk_lite+demo\connect-sdk-Demo\sample\libs里面的android-support-v4.jar,放入android项目中的libs文件夹中(没有libs则新建libs文件夹吧),然后分别右击,选择Build Path->Add to Build Path。

因为需要跟Unity交互,我们需要Unity的jar文件,在Unity安装目录下找到它,放入android项目中的libs文件夹中,然后右击它,选择Build Path->Add to Build Path。

导入完成后如下图目录所示:

现在我们开始配置AndroidManifest.xml文件,里面内容都是参考QQ开放平台里面的案例,可以对照着看看。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.Tecent.TecentYule"
    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" />
    <!-- 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="@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>

接着开始在src文件夹下的MainActivity.java中添加供Unity调用的接口(可以参照下载的SDK中的《Andriod_SDK_V3.3.3接口调用说明》来添加自己想要调用的接口)

代码语言:javascript
复制
package com.Tecent.TecentYule;

import org.json.JSONObject;

import com.tencent.connect.common.Constants;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
import com.unity3d.player.UnityPlayerActivity;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;

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);
            }           
   }
   IUiListener loginListener = new BaseUiListener() {
       @Override
       protected void doComplete(JSONObject values) {
           initOpenidAndToken(values);           
       }
   };
   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) {
       }
   }

 

@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中创建一个脚本,并挂在摄像机上。

代码语言:javascript
复制
using UnityEngine;
using System.Collections;

public class TestLogin : MonoBehaviour {

	void Update () {
        if (Input.GetMouseButtonDown(0))
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
            jo.Call("LoginAndSend");
        }
	}
}

完成后打包测试,效果图如图:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/01/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前期准备
  • 接下来New Project新建Android Application project工程
  • 最后在unity里面创建一个安卓项目。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档