【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文件,之后随意取个名字

【Unity】QQ登录SDK接入(Unity&Android)_第1张图片

一路点击Next完成安装。

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

【Unity】QQ登录SDK接入(Unity&Android)_第2张图片

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。 

【Unity】QQ登录SDK接入(Unity&Android)_第3张图片

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

【Unity】QQ登录SDK接入(Unity&Android)_第4张图片

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




    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
            
                

                
            
        
        
            
                
                
                
                //这里填写的是QQ开发平台上自己申请的APPID。
                
            
        
        
    


接着开始在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.点击继续

【Unity】QQ登录SDK接入(Unity&Android)_第5张图片

清除所有选项,只选择src,libs,res三个文件夹,同时libs文件中classes要取消掉,不然在unity里面打包会报错。在下面选择打包地址和名字,然后点击Finsih,获得一个test.jar文件。 

【Unity】QQ登录SDK接入(Unity&Android)_第6张图片

最后在unity里面创建一个安卓项目。 
在Assests 中新建Floder命名为“Plugins”,在“Plugins”文件夹中新建Floder命名为“Android” ,在“Android”文件夹新建Floder命名为”bin”,并将刚刚导出的test.ja文件和open_sdk_r6008_lite.jar文件放入此文件夹中。再将Eclipse 的Android项目中复制res文件夹和AndroidManifest.xml一并放入“Android”文件夹中。 
【Unity】QQ登录SDK接入(Unity&Android)_第7张图片

在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("currentActivity");
            jo.Call("LoginAndSend");
        }
	}
}

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

【Unity】QQ登录SDK接入(Unity&Android)_第8张图片

 

你可能感兴趣的:(Unity相关SDK接入)