Unity和Eclipse对接Mob平台的SMSSDK短信验证

一.前往http://www.mob.com/,下载SMSSDK For Android,申请项目获得appKey和appSecret:
这里写图片描述

这里写图片描述

二.创建eclipse项目,注意包名,Unity发包设置保持一致,将需要的jar包导入项目libs文件夹下并add path,包括下载下来的SMSSDK/libs中的4个jar包和与Unity通信的classes.jar包
这里写图片描述

这里写图片描述

三.配置AndroidManifest.xml文件中的权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.smstest"
    android:versionCode="30101"
    android:versionName="3.1.1" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="21" />

    <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>

          <!-- 短信验证Mob依赖库必备的 -->
        <activity
            android:name="cn.smssdk.SMSSDKUIShell"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:windowSoftInputMode="stateHidden|adjustResize" />

    </application>

     <!-- 短信验证的权限 -->
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

</manifest>

四.编写主要代码,现在网上说的初始化SDK的函数已经过时,Mob平台已经将SMSSDK.initSDK(this, appKey, appSecret)更换成了MobSDK.init(this,”appKey”,”appSecret”),appKey和appSecret就是我们在Mob平台申请项目时得到的

package com.smstest;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import com.mob.MobSDK;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
import cn.smssdk.EventHandler;  
import cn.smssdk.SMSSDK;  


public class MainActivity extends UnityPlayerActivity {

    EventHandler eh;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);

        MobSDK.init(this,"24fc3df507206","d48a8eb1d3021e0dce1d8b63d1973bc1");

     // 短信验证回调
        eh = new EventHandler() {
            @Override
            public void afterEvent(int event, int result, Object data) {
                if (result == SMSSDK.RESULT_COMPLETE) {
                    //回调完成
                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                        //提交验证码成功
                        Log.i("EventHandler", "提交验证码成功");
                        //调用Unity里面的函数    参数:调用函数所在脚本所在的GameObject,函数名,函数所需的参数
                        UnityPlayer.UnitySendMessage("SMS", "ReturnResult", "true");
                        unRegisterEventHandler();
                    } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                        //获取验证码成
                        Log.i("EventHandler", "获取验证码成功");
                    } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
                        //返回支持发送验证码的国家列表
                        Log.i("EventHandler", "返回支持发送验证码的国家列表");
                    }
                } else {
                    ((Throwable) data).printStackTrace();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Log.w("Tag","信验证失败");
                        }
                    });
                    Log.i("EventHandler", "回调失败");
                }
            }
        };

        SMSSDK.registerEventHandler(eh);//注册短信回调接口
    }

     // 获取验证码
    public void GetCode(String PhoneNumber)
    {
        SMSSDK.getVerificationCode("86", PhoneNumber, null);
    }

    // 提交验证码
    public void sendCode(String PhoneNumber,String VerifyCode)
    {
        SMSSDK.submitVerificationCode("86", PhoneNumber,VerifyCode);
    }

  //最后注销监听,否则可能会造成内存泄露,我这里随便找的位置调用的,就是在一次认证成功之后,可以放在关闭程序的时候调用
    public void unRegisterEventHandler()
    {
          SMSSDK.unregisterEventHandler(eh);
    }

}

五.刷新一下项目并build一次,没有报错就打一个只包含代码的jar包
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

六.在 unity中,我们新建一个Plugins文件夹,Plugins下面又建Android文件夹,Android文件夹下再建一个bin文件夹,我们将我 们导出的jar包放进这个文件夹下,然后我们在eclipse中的res和libs文件复制一份放入Android,也要把AndroidManifest.xml 放进Android目录下。详细情况如下:
这里写图片描述

七.设计一个简单的短信认证操作界面,注意有个预设名字叫SMS的,它身上有绑定脚本,在安卓中调用这个脚本里面的函数会根据这个预设(gameObject)名称,函数名,函数参数来设置,UnityPlayer.UnitySendMessage(“SMS”, “ReturnResult”, “true”);
这里写图片描述
下面是脚本代码SMSTest.cs

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class SMSTest : MonoBehaviour {

    public Text m_secees;
    public Button btnSend;
    public Button btnGetCode;
    public InputField inputPhone;
    public InputField inputCode;

    private AndroidJavaObject m_activity;

    // Use this for initialization
    void Start () {
        if (Application.platform != RuntimePlatform.Android)
            return;
        Debug.Log("调用安卓端的初始化");
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        m_activity = jc.GetStatic<AndroidJavaObject>("currentActivity");
    }

    // Update is called once per frame
    void Update () {

    }

    /// <summary>
    /// 填写手机号后申请获取验证码
    /// </summary>
    public void GetCode()
    {
        Debug.Log("索要验证码");
        m_activity.Call("GetCode", inputPhone.text);
    }

    /// <summary>
    /// 从手机获得验证码后提交验证
    /// </summary>
    public void SendCode()
    {
        Debug.Log("提交验证");
        m_activity.Call("sendCode", inputPhone.text, inputCode.text);
    }

    public void ReturnResult(string secces)
    {
        if(secces == "true")
            m_secees.gameObject.SetActive(true);
        Debug.Log("验证成功与否:" + secces);
    }
}

八.最后就是发安卓包测试了,一定要发包才能测,因为需要安卓环境才能运行以上代码,注意设置包名和安卓包名一样
这里写图片描述

九.当然就是安装在手机或者模拟器上测试了,注意我这里设计的很简单,没有联网判断和手机号码合法判断,只有一个主要流程.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值