zoukankan      html  css  js  c++  java
  • Unity添加小米游戏SDK

    因为游戏要上线小米的平台,所以游戏就要添加小米SDK,整了3天总算是把小米SDK添加上了~~

    多亏找到了这个帖子:Unity3D接入小米盒子SDK

    (小米人家论坛有官方贴出来的其他开发者的接入经验~妈蛋的360!论坛里面找不到,微信客服回复让我发邮件,QQ客服根本是死人,加了N次就没通过过,发邮件回复的是让我加入5万元推广计划!狗屁的360!!!)

    骂完感觉舒服多了...虽然360的还是要做接入...TMD~~

    主要就是记录一下自己添加过程中的一些要注意的东西~~

    首先游戏的包名要符合他小米的要求:

    因为我们的是游戏,所以包名:com.HorizonGame.Crisis.mi

    然后按照Unity3D接入小米盒子SDK帖子里面说的,在Eclipse里面打包我们要的Jar,

    不过我的代码稍微跟他的有点区别,因为他的是小米盒子不存在旋转屏幕的问题,但是手机不行,

    要是不处理的话,在手机旋转屏幕后,会遇到关闭Activity(也就是说我们的游戏被关闭了)或者OnCreate函数重复执行(也就是说我们的游戏重启了)

    MainActivity.Java的代码如下:

      1 package com.HorizonGame.Crisis.mi;
      2 
      3 import java.util.UUID;
      4 
      5 import android.content.pm.ActivityInfo;
      6 import android.content.res.Configuration;
      7 import android.os.Bundle;
      8 
      9 import com.unity3d.player.UnityPlayer;
     10 import com.unity3d.player.UnityPlayerActivity;
     11 import com.xiaomi.gamecenter.sdk.MiCommplatform;
     12 import com.xiaomi.gamecenter.sdk.MiErrorCode;
     13 import com.xiaomi.gamecenter.sdk.OnLoginProcessListener;
     14 import com.xiaomi.gamecenter.sdk.OnPayProcessListener;
     15 import com.xiaomi.gamecenter.sdk.entry.MiAccountInfo;
     16 import com.xiaomi.gamecenter.sdk.entry.MiAppInfo;
     17 import com.xiaomi.gamecenter.sdk.entry.MiBuyInfoOffline;
     18 import com.xiaomi.gamecenter.sdk.entry.MiAppType;
     19 
     20 public class MainActivity extends UnityPlayerActivity implements OnLoginProcessListener,OnPayProcessListener {
     21 
     22     public static MiAppInfo appInfo;
     23     
     24     @Override
     25     protected void onCreate(Bundle savedInstanceState) {
     26         super.onCreate(savedInstanceState);
     27         appInfo = new MiAppInfo();
     28         appInfo.setAppId("***************");// 这个根据自己的游戏而定
     29         appInfo.setAppKey("*************");// 这个根据自己的游戏而定
     30         appInfo.setAppType(MiAppType.offline);
     31         MiCommplatform.Init(this, appInfo);
     32     }
     33     
     34     @Override 
     35     public void onConfigurationChanged(Configuration newConfig)
     36     { 
     37         super.onConfigurationChanged(newConfig); 
     38     }
     39     
     40     public void Login() {
     41         MiCommplatform.getInstance().miLogin(MainActivity.this,MainActivity.this);
     42     }
     43 
     44     public void Buy(String m_str0, int m_int0) {
     45         MiBuyInfoOffline offline = new MiBuyInfoOffline();
     46         offline.setCpOrderId(UUID.randomUUID().toString());
     47         offline.setProductCode(m_str0);
     48         offline.setCount(m_int0);
     49         try {
     50             // 调用SDK执行购买操作
     51             MiCommplatform.getInstance().miUniPayOffline(MainActivity.this,offline, MainActivity.this);
     52         } 
     53         catch (Exception e) {
     54             e.printStackTrace();
     55         }
     56     }
     57     
     58     @Override
     59     public void finishLoginProcess(int arg0, MiAccountInfo arg1) {
     60 
     61         if (MiErrorCode.MI_XIAOMI_GAMECENTER_SUCCESS == arg0) 
     62         {
     63             UnityPlayer.UnitySendMessage("MI_SDK", "Result","GAMECENTER_SUCCESS");
     64         } 
     65         else if (MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_LOGINOUT_SUCCESS == arg0) 
     66         {
     67             UnityPlayer.UnitySendMessage("MI_SDK", "messgae","ERROR_LOGINOUT_SUCCESS");
     68         } 
     69         else if (MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_LOGINOUT_FAIL == arg0) 
     70         {
     71             UnityPlayer.UnitySendMessage("MI_SDK", "Result","ERROR_LOGINOUT_FAIL");
     72         } 
     73         else if (MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_ACTION_EXECUTED == arg0) 
     74         {
     75             UnityPlayer.UnitySendMessage("MI_SDK", "Result","ERROR_ACTION_EXECUTED");
     76         } 
     77         else {
     78             UnityPlayer.UnitySendMessage("MI_SDK", "Result", "else");
     79         }
     80     }
     81     
     82     @Override
     83     public void finishPayProcess(int arg0) {
     84         if (arg0 == MiErrorCode.MI_XIAOMI_GAMECENTER_SUCCESS)// 成功
     85         {
     86             UnityPlayer.UnitySendMessage("MI_SDK", "Result","MI_XIAOMI_GAMECENTER_SUCCESS");
     87         } 
     88         else if (arg0 == MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_CANCEL|| arg0 == MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_PAY_CANCEL)// 取消
     89         {
     90             UnityPlayer.UnitySendMessage("MI_SDK", "Result","MI_XIAOMI_GAMECENTER_ERROR_CANCEL");
     91         } 
     92         else if (arg0 == MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_PAY_FAILURE)// 失败
     93         {
     94             UnityPlayer.UnitySendMessage("MI_SDK", "Result","MI_XIAOMI_GAMECENTER_ERROR_PAY_FAILURE");
     95         } 
     96         else if (arg0 == MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_PAY_REPEAT)
     97         {
     98             UnityPlayer.UnitySendMessage("MI_SDK", "Result","MI_XIAOMI_GAMECENTER_ERROR_PAY_REPEAT");
     99         } 
    100         else if (MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_ACTION_EXECUTED == arg0) 
    101         {
    102             UnityPlayer.UnitySendMessage("MI_SDK", "Result","MI_XIAOMI_GAMECENTER_ERROR_ACTION_EXECUTED");
    103         } 
    104         else if (arg0 == MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_LOGIN_FAIL)
    105         {
    106             UnityPlayer.UnitySendMessage("MI_SDK", "Result","MI_XIAOMI_GAMECENTER_ERROR_LOGIN_FAIL");
    107         }
    108     }
    109 }

    其实主要就是添加了下面这个函数:

        @Override 
        public void onConfigurationChanged(Configuration newConfig)
        { 
            super.onConfigurationChanged(newConfig); 
        }

    然后AndroidManifest.xml如下:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.HorizonGame.Crisis.mi"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="18" />
    
        <uses-permission android:name="android.permission.GET_TASKS" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.HorizonGame.Crisis.mi.MainActivity"
                android:label="@string/app_name" 
                android:configChanges="orientation|keyboardHidden|screenSize"
                android:screenOrientation="landscape">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>

    在AndroidManifest.xml里面主要是在activity中添加了

     android:configChanges="orientation|keyboardHidden|screenSize"
     android:screenOrientation="landscape"

    尤其是Android4.0往上,一定要添加screenSize这项,要不然无效的~~

    然后其他的就继续参考Unity3D接入小米盒子SDK

    该打包的打包,该在Unity里面写代码的写代码就行了,

    然后测试一下~

    终于成功了~

  • 相关阅读:
    Spark Scala 读取GBK文件的方法
    Mac OS X 系统下自带的文本文件格式转换工具iconv
    报到
    java 字符串中含有双引号" "与单引号' '问题
    div1嵌套div2,div2居中的解决办法
    ionic4 创建 angular项目 ReactNative下载第三方库出错解决Error: EPERM: operation not permitted, rename
    ionic+cordova 创建项目+打包
    jxl读取excel文件异常:Unable to recognize OLE stream 的解决方法
    学习 javascript (一)javascript 简介
    学习 JavaScript (四)核心概念:操作符
  • 原文地址:https://www.cnblogs.com/rayyang/p/4487313.html
Copyright © 2011-2022 走看看