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

  • 前期准备

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开放平台里面的案例,可以对照着看看。 

<?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接口调用说明》来添加自己想要调用的接口)

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

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");
        }
	}
}

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

 

接入Unity SDK,首先需要理解Unity与安卓平台之间的交互方式。在安卓平台上,主体是Java,而Unity项目的主体则是封装的项目。 具体步骤如下: 1. 创建一个继承自SDKBase的类,例如SDKForAndroid。 2. 在SDKForAndroid类中,使用DllImport("__Internal")来引用Unity的函数。这些函数包括SDKInit()、SDKLogin()和SDKLogout()等等。 3. 在SDKForAndroid类中,重写Init()、Login()、Logout()、Pay()、LoginGame()和CreateRole()等方法,并在这些方法中调用对应的Unity函数。 4. 在SDKForAndroid类中,根据需要可以添加其他功能的实现。 5. 在Unity项目中,将SDKForAndroid类添加到需要接入SDK的场景中。 通过以上步骤,就可以实现Unity SDK接入了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Unity 接入SDKAndroid)](https://blog.csdn.net/qq_52956140/article/details/121463308)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [[Unity]Unity接平台SDK(3种方式)](https://blog.csdn.net/zp288105109a/article/details/80244617)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值