一.前往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);
}
}
八.最后就是发安卓包测试了,一定要发包才能测,因为需要安卓环境才能运行以上代码,注意设置包名和安卓包名一样
九.当然就是安装在手机或者模拟器上测试了,注意我这里设计的很简单,没有联网判断和手机号码合法判断,只有一个主要流程.