【Unity】中接入QQ官方SDK实现QQ登录(Android环境) 新手教程

2 篇文章 0 订阅
1 篇文章 0 订阅

作为一个新手做准备工作的时候,在网上找了很多例子,发现其中有很多例子是有错误的,各种花式报错,好在最后终于成功了,在此记录一下自己接入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" />
    <!-- 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>

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

配置Unity安卓环境,要保证跟 eclipse中创建的安卓环境一样。
这里写图片描述
这里写图片描述

完成以上步骤后,就可以开始打包APK文件了。在模拟器中安装。

点击一下鼠标,拉取授权~~~~

这里写图片描述

成功了拉取到授权~~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值