大家好,我叫红定义,最几天接入小米盒子的SDK,费了点周折,多谢 ぷMeteor℡、秋实、Feel、seav、小山、杨冬、小福贵!、 赵永鹏 的帮助才能顺利接通,下面我把具体操作步骤给大家梳理一遍,也好让大家少走弯路。
1.首先在小米开发者站注册账号
http://dev.xiaomi.com/
2.然后在电视应用中创建应用
3.选择配置,配置支付的商品
4.然后添加商品,添加完保存即可
5.打开unity新建一个工程,目录结构如下图,大小写和结构要对
6.解压缩SDK文件包
7.新建Eclipse工程,bundle要和unity的一致
8.导入apk及jar文件,目录如下
9.Classes.jar是unity的Android包
10.也一起导入进来
11.MainActivity.java 代码如下
package com.tantoo.CrazyGuess_TVP_xiaomi.mitv;
import java.util.UUID;
import android.content.Intent;
import android.os.Bundle;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
import com.xiaomi.gamecenter.sdk.MiCommplatform;
import com.xiaomi.gamecenter.sdk.MiErrorCode;
import com.xiaomi.gamecenter.sdk.OnLoginProcessListener;
import com.xiaomi.gamecenter.sdk.OnPayProcessListener;
import com.xiaomi.gamecenter.sdk.entry.MiAccountInfo;
import com.xiaomi.gamecenter.sdk.entry.MiAppInfo;
import com.xiaomi.gamecenter.sdk.entry.MiBuyInfoOffline;
import com.xiaomi.gamecenter.sdk.entry.MiGameType;
public class MainActivity extends UnityPlayerActivity implements
OnLoginProcessListener, OnPayProcessListener {
public static MiAppInfo appInfo;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
appInfo = new MiAppInfo();
appInfo.setAppId("2882303761517236914");
appInfo.setAppKey("5211723634914");
appInfo.setAppType(MiGameType.offline);
MiCommplatform.Init(this, appInfo);
}
public void login_test(String m_str) {
UnityPlayer.UnitySendMessage("Main Camera", "messgae", "login0");
MiCommplatform.getInstance().miLogin(MainActivity.this,
MainActivity.this);
UnityPlayer.UnitySendMessage("Main Camera", "messgae", "login1");
}
public void buy_test(String m_str0, String m_str1, int m_int0) {
UnityPlayer.UnitySendMessage("Main Camera", "messgae", "buy_test");
MiBuyInfoOffline offline = new MiBuyInfoOffline();
offline.setCpOrderId(UUID.randomUUID().toString());
offline.setProductCode("CrazyGuess_Item_4");
offline.setCount(1);
try {
// 调用SDK执行购买操作
MiCommplatform.getInstance().miUniPayOffline(MainActivity.this,
offline, MainActivity.this);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void finishLoginProcess(int arg0, MiAccountInfo arg1) {
if (MiErrorCode.MI_XIAOMI_GAMECENTER_SUCCESS == arg0) {
UnityPlayer.UnitySendMessage("Main Camera", "messgae",
"GAMECENTER_SUCCESS");
} else if (MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_LOGINOUT_SUCCESS == arg0) {
UnityPlayer.UnitySendMessage("Main Camera", "messgae",
"ERROR_LOGINOUT_SUCCESS");
} else if (MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_LOGINOUT_FAIL == arg0) {
UnityPlayer.UnitySendMessage("Main Camera", "messgae",
"ERROR_LOGINOUT_FAIL");
} else if (MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_ACTION_EXECUTED == arg0) {
UnityPlayer.UnitySendMessage("Main Camera", "messgae",
"ERROR_ACTION_EXECUTED");
} else {
UnityPlayer.UnitySendMessage("Main Camera", "messgae", "else");
}
}
@Override
public void finishPayProcess(int arg0) {
if (arg0 == MiErrorCode.MI_XIAOMI_GAMECENTER_SUCCESS)// 成功
{
UnityPlayer.UnitySendMessage("Main Camera", "messgae",
"MI_XIAOMI_GAMECENTER_SUCCESS");
} else if (arg0 == MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_CANCEL
|| arg0 == MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_PAY_CANCEL)// 取消
{
UnityPlayer.UnitySendMessage("Main Camera", "messgae",
"MI_XIAOMI_GAMECENTER_ERROR_CANCEL");
} else if (arg0 == MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_PAY_FAILURE)// 失败
{
UnityPlayer.UnitySendMessage("Main Camera", "messgae",
"MI_XIAOMI_GAMECENTER_ERROR_PAY_FAILURE");
} else if (arg0 == MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_PAY_REPEAT) {
UnityPlayer.UnitySendMessage("Main Camera", "messgae",
"MI_XIAOMI_GAMECENTER_ERROR_PAY_REPEAT");
} else if (MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_ACTION_EXECUTED == arg0) {
UnityPlayer.UnitySendMessage("Main Camera", "messgae",
"MI_XIAOMI_GAMECENTER_ERROR_ACTION_EXECUTED");
} else if (arg0 == MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_LOGIN_FAIL) {
UnityPlayer.UnitySendMessage("Main Camera", "messgae",
"MI_XIAOMI_GAMECENTER_ERROR_LOGIN_FAIL");
}
}
}
12.AndroidManifest.xml的代码如下
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tantoo.CrazyGuess_TVP_xiaomi.mitv"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.GET_TASKS" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:theme="@style/AppTheme" >
<activity
android:name="com.tantoo.CrazyGuess_TVP_xiaomi.mitv.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>
</application>
</manifest>
13.右键-工程在系统中的路径
14.Cmd-E:-cd E:\EclipseProjects\XiaomiSDKtest\bin\classes
15.jar -cvf reddefine.jar *
16.复制reddefine.jar到unity的bin文件夹中,也把SDK包丢到bin中
17.回到Eclipse工程目录,拷贝这两项
18.到unity的bin目录同级
19.Unity中test的代码
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour
{
private string m_strss = "";
void OnGUI()
{
if (GUI.Button(new Rect(50, 50, 100, 50), "login_test") )
{
m_strss += " login ";
using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"))
{
jo.Call("login_test", "hehe");
}
}
}
if (GUI.Button(new Rect(50, 150, 100, 50), "press") )
{
m_strss += " buy ";
using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"))
{
jo.Call("buy_test", "hehe", "00", 1);
}
}
}
GUILayout.Label(m_strss);
}
public void messgae(string str)
{
m_strss += str + " ";
}
}
20.Playersetting属性
21.Build出包
22.安装到小米盒子上,OK,大功告成,哈哈~