米聊社交游戏API

注意:

  1. 在接入米聊社交游戏API之前,先跟商务同学联系,确保您的游戏适合接入米聊社交关系,再继续阅读此文档;
  2. 此文档中定义的API仅适合游戏,请软件不要接入米聊社交关系;
  3. 若您要接入小米应用内支付,请访问应用内支付接入指南。

快速导航: 下载最新SDK错误代码技术FAQ运营FAQSDK更新记录 有任何技术问题,欢迎到游戏开发者论坛吐槽,寻求帮助。

修订记录:


米聊社交游戏介绍: 如果您的游戏需要接入米聊的以下属性,即需要接入米聊社交游戏SDK:


接入步骤:


整体技术架构图: enter image description here 说明:

初始化:

请先获取AppId和AppKey(到开发者站http://dev.xiaomi.com创建应用,并接入应用内支付服务),然后调用下面的SDK初始化代码进行初始化操作。 将SDK包中的MiGameCenterSDKService.apk放到应用工程的的assets目录下,SDK的jar包放到工程的libs下,在buildpath中引用,然后对SDK进行初始化。,(注:检查游戏的包名是否与提供给小米后台数据配置的包名一致,appid与appkey是否与申请的一致,如果不一致会导致调用登录和其它SDK接口失败),请在Application.onCreate中调用以下初始化方法

MiAppInfo appInfo = new MiAppInfo();
appInfo.setAppId("开发者申请获得");
appInfo.setAppKey("开发者申请获得");
appInfo.setOrientation( ScreenOrientation.horizontal ); //横竖屏
MiCommplatform.Init( this, appInfo );

SDK所需要的权限:

< uses-permission android:name="android.permission.GET_TASKS"  />
< uses-permission android:name="com.xiaomi.sdk.permission.PAYMENT" />

接口调用流程图:

1)miLogin()和loadGameInfo()为必须调用接口、调用完这两个接口之后所有的米聊社交API接口都可以调用 。

2)在调用useHeart()/updateMe()接口之前必须调用loadGameMe()接口。 3)在调用updateResult()/updateResults()接口之前必须调用useHeart()接口。

4)在调用acceptMessage()/acceptAllMessage()接口之前必须调用loadGameMessage()接口。

5)syncResult()/syncResults()接口是服务器配置的,如需使用请联系游戏接入运营人员。

其它接口依照自己的需求任意调用。 - 完整接入方式:适合休闲类游戏 enter image description here - 简化的接入方式:适合MMORPG游戏 enter image description here

登陆调用miLogin:

MiCommplatform.getInstance().miLogin( context,new OnLoginProcessListener()
{
        @Override
        public void finishLoginProcess( int code, MiAccountInfo arg1 )
        {
             switch( code )
            {
                     case MiErrorCode.MI_XIAOMI_GAMECENTER_SUCCESS:
                                // 登陆成功
                 //获取用户的登陆后的UID(即用户唯一标识)
                  long uid = arg1.getUid();
                               break;
                     case MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_LOGIN_FAIL:
                               // 登陆失败
                                break;
                     case MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_CANCEL:
                                // 取消登录
                                break;
         case MiErrorCode.MI_XIAOMI_GAMECENTER_ERROR_ACTION_EXECUTED:   
                 //登录操作正在进行中
                 break;     
         default:
                                // 登录失败
                       break;
          }
    }
} );

loadGameInfo: 读取游戏的配置信息,这些配置信息是区分游戏的,是运营可配置的始化游戏的基本配置。,在游戏启动时,通过此接口初始化游戏的基本配置。

请求参数:无

返回参数:

名称 说明
max_heart 体力上限(通过接收赠送可以突破rechargeable_heart,但是不能突破max_heart)
rechargeable_heart 可充值体力上限
heart_regen_interval 体力恢复间隔,单位秒
game_message_interal 发送赠送体力间隔,单位秒(对同一好友不能连续赠送,需要等待间隔后才能再次赠送)
invitation_interval 发送邀请间隔,单位秒(同上)
invitation_interval 发送邀请间隔,单位秒(同上)
score_reset_wday 分数将在周几重置(Sunday:0 Monday:1……)
score_reset_hour 分数将在哪一个小时重置
next_score_reset_time 距离下次重置还有多少个小时
min_version_for_ios 支持的最低iOS系统版本
min_version_for_android 支持最低Android系统版本
min_version_for_android 支持最低Android系统版本
leaderboards 排行榜(可能会存在多个排行榜)
排行榜包含字段
key 排行榜的标识
name 排行版的名称
MiCommplatform.getInstance().loadGameInfo(GamActivity.this,new MiResponseHandler()
    {
           @Override
        protected void onError( int sdkStatus, JSONObject result )
        {
                alert( GamActivity.this, "onError", "\n sdkstatus:" + sdkStatus );
           }
        @Override
           protected void onComplete( int arg1, JSONObject result )
        {
                  alert( GamActivity.this, "onComplete", "\n sdkstatus:" + arg1 + "\n result:" + result );
                  Log.i("GameInfo","rechargeable_heart:"+result.optString( "rechargeable_heart" ) );
                 Log.i("GameInfo","game_message_interval:"+result.optString( "game_message_interval" ) );
                  Log.i("GameInfo","heart_regen_interval:"+result.optString( "heart_regen_interval" ) );
                Log.i("GameInfo","invitation_interval:"+result.optString( "invitation_interval" ) );
               Log.i( "Game Info", "name: " + result.optString( "name" ) );
               Log.i( "Game Info", "max_heart:" + result.optString("max_heart") );
                  Log.i("GameInfo","score_reset_wday:"+result.optString( "score_reset_wday" ) );
                Log.i("GameInfo","score_reset_hour:"+result.optString( "score_reset_hour" ) );
                  Log.i("GameInfo","next_score_reset_time:"+result.optString( "next_score_reset_time" ) );
                  Log.i("GameInfo","min_version_for_ios:"+result.optString( "min_version_for_ios" ) );
                  Log.i("GameInfo","min_version_for_android:"+result.optString( "min_version_for_android" ) );
                Log.i("GameInfo","current_version_for_ios:"+result.optString( "current_version_for_ios" ) );
                  Log.i("GameInfo","current_version_for_android:"+ result.optString( "current_version_for_android" ) );
                  Log.i( "Game Info", "notice: " + result.optString( "notice" ) );
               JSONArray leaderboards = result.optJSONArray( "leaderboards" );
                  if ( leaderboardKeys != null )
                           leaderboardKeys = new String[0];
                  leaderboardKeys = new String[leaderboards.length()];
            try
                {
                          Log.i( "", "-------- Game leaderboards" );
                        for ( int i = 0; i < leaderboards.length(); i++ )
                        {
                                JSONObject leaderboard = leaderboards.getJSONObject( i );
                                  Log.i( "", "name: " + leaderboard.optString( "name" ) );
                                Log.i( "", "key: " + leaderboard.optString( "key" ) );
                                leaderboardKeys[i] = leaderboard.optString( "key" );
                          }
                  }
                catch ( JSONException e )
                {
                           e.printStackTrace();
                }
        }
    } );

loadGameMe: 读取玩家当前状态。当返回游戏首页时,通过此接口,刷新玩家状态。

请求参数:无

返回参数:

名称 说明
user_id 游戏中心uid
nickname 米聊昵称
profile_image_url 米聊头像地址
exp 当前总经验值
heart 当前体力
heart_regen_starts_at 体力恢复起始时间
message_blocked 是否不接收体力(如果用户开启了这项,他的朋友无法向他赠送体力。我们第一期可以不实现这个功能,仅保留这个字段,取值始终是false)
message_count 当前未接收体力条数,读取具体哪些体力未领取,是单独接口。
private_data 私有附加存储数据(仅本账号可见的附加存储数据,CP可用来记录玩家的道具数量、货币数量等)
public_data 公开附加存储数据(好友们可见的附加存储数据,CP可用来记录签名、勋章、avatar等。比如我在游戏里换了时装,我的好友就能看得到。)
scores 分数(一个游戏可能会有多个排行榜,比如按照获取金币排行、按照飞行距离排行、按照击杀怪物排行,所以可能会有多个分数)
分数的数据结构包含以下字段
leaderboard_key 排行榜标识
season_score 本季最高分(一季可能是一周)
last_season_score 上一季最高分
best_score 有史以来最高分
last_score 上次最高分
MiCommplatform.getInstance().loadGameMe( GamActivity.this, new MiResponseHandler()
{
    @Override
    protected void onComplete( int arg0, JSONObject result )
    {
           alert( GamActivity.this, "onComplete", "\n result:" + result );
        Log.i( "", "-------- User Info" );
        Log.i( "", "user_id: " + result.optString( "user_id" ) );
           Log.i( "", "nickname: " + result.optString( "nickname" ) );
        Log.i( "", "profile_image_url: " + result.optString( "profile_image_url" ) );
        Log.i( "", "heart: " + result.optString( "heart" ) );
        currentHeart = Integer.parseInt( result.optString( "heart" ) );
        Log.i( "", "exp: " + result.optString( "exp" ) );
        Log.i("","heart_regen_starts_at:"+result.optString( "heart_regen_starts_at" ) );
        String publicData = result.optString( "public_data" );
        if ( publicData != null )
        {
                Log.i( "", "public_data : after- " + publicData );
                byte[] decoded = Base64.decode( publicData, 0 );
                publicData = new String( decoded );
                Log.i( "", "public_data: before-" + publicData );
        }
        String privateData = result.optString( "private_data" );
        if ( privateData != null )
        {
                Log.i( "", "private_data : after- " + privateData );
                byte[] decoded = Base64.decode( privateData, 0 );
                privateData = new String( decoded );
                Log.i( "", "private_data: before-" + privateData );
        }
        Log.i( "", "message_count: " + result.optString( "message_count" ));
        final String message_block = result.optString( "message_blocked");
        isMessageBlocked = message_block.equals( "1" );
        Log.i( "", "message_blocked: " + isMessageBlocked );
        JSONArray scores = result.optJSONArray( "scores" );
        Log.i( "", "-------- Score Info" );
        try
        {
                for ( int i = 0; i < scores.length(); i++ )
                {
                    JSONObject score = scores.getJSONObject( i );
                    Log.i("","leaderboard_key:"+score.optString( "leaderboard_key" ) );
                    Log.i( "", "season_score: " + score.optString( "season_score" ) );
                    Log.i("","last_season_score:"+score.optString( "last_season_score" ) );
                    Log.i( "", "last_score: " + score.optString( "last_score" ) );
                    Log.i( "", "best_score: " + score.optString( "best_score" ) );
                }
        }
        catch ( Exception e )
        {
                e.printStackTrace();
        }
    }
    @Override
    protected void onError( int arg0, JSONObject result )
    {
            alert( GamActivity.this, "onError", "\n sdkstatus:" + arg0 );
    }
} );

loadGameFriends: 读取玩家的好友列表及好友信息。 好友列表用来展示积分榜、赠送体力、邀请好友。

请求参数:无

返回参数:

名称 说明
friends_count 好友数量
app_friends 已经在玩这款游戏的好友
已玩游戏好友包含以下字段
user_id 游戏中心uid
rank 排名
best_score 最高分
nickname 米聊用户昵称
friend_nickname 用户设置的昵称
profile_image_url 头像地址
message_blocked 好友是否允许赠送体力
last_message_sent_at 最后发消息时间
season_score 本赛季最高分
last_season_score 上个赛季最高分
exp 当前总经验值
public_data 保存的数据
friends 没有玩游戏的好友
MiCommplatform.getInstance().loadGameFriends(GameFriendListActivity.this,new MiResponseHandler()
{
 @Override
 protected void onComplete( int miStatus, JSONObject result )
 {
 if ( !result.has( "app_friends" ))
 {
 Log.i( TAG, "friends info is null." );
 return;
 }
 JSONArray appFriendArray = result.optJSONArray( "app_friends");
 if ( appFriendArray.length() == 0 && friendArray.length() == 0 )
 MessageUtil.alert( GameFriendListActivity.this, "no friends" );
 appFriends.clear();
 Log.i( "", "-------- app friends" );
 for ( int i = 0, n = appFriendArray.length(); i < n; i++ )
 {
 JSONObject friend = appFriendArray.optJSONObject( i );
 if ( friend != null )
 {
 appFriends.add( friend );
 Log.i( "", "-------- app_friends[" + i + "]" );
 Log.i( "", "rank: " + friend.optString( "rank" ));
 Log.i( "", "user_id: " + friend.optString( "user_id" ) );
 Log.i( "", "nickname: " + friend.optString( "nickname" ));
 Log.i("","profile_image_url:"+friend.optString( "profile_image_url" ) );
 Log.i("","friend_nickname:"+friend.optString("friend_nickname" ));
 Log.i("","message_blocked:"+friend.optString( "message_blocked" ) );
 Log.i("","last_message_sent_at:"+friend.optString( "last_message_sent_at" ) );
 Log.i( "", "season_score: " + friend.optString( "season_score" ) );
 Log.i("","last_season_score:"+friend.optString( "last_season_score" ) );
 Log.i( "", "last_score: " + friend.optString( "last_score") );
 Log.i( "", "best_score: " + friend.optString( "best_score" ) );
 Log.i( "", "exp: " + friend.optString( "exp" ) );
 String publicData = friend.optString( "public_data" );
 if ( publicData != null )
 {
 Log.i( "", "public_data : after- " + publicData );
 byte[] decoded = Base64.decode( publicData, 0 );
 publicData = new String( decoded );
 Log.i( "", "public_data: before-" + publicData );
 }
 }
 }
 friendType = FriendInfoType.AppFriends;
 changeList();
 MessageUtil.alert( GameFriendListActivity.this, "onComplete", "sdk Status: " + miStatus + ", result: " + result );
 }
 @Override
 protected void onError( int miStatus, JSONObject result )
 {
 MessageUtil.alert( GameFriendListActivity.this, "onError", "sdkStatus: " + miStatus + ", result: " + result );
 }
} );

loadLeaderBoard: 多个积分榜中读取某一个积分榜的信息

请求参数:

名称 说明
leaderboardKey 某个积分榜的key,通过loadGameInfo接口获取
page 排行榜页码,默认为1
pageCount 每页榜单的条数,默认20,最大值100

返回参数:

名称 说明
leaderboard_key 排行榜的key
total 有积分的好友的总数
app_friends 好友列表
好友列表字段
user_id 游戏中心uid
best_score 最好成绩
season_score 本赛季最高分
last_season_score 上个赛季最高分
rank 排名
nickname 昵称
profile_image_url 头像地址
message_blocked 是否允许赠送体力
exp 当前总经验
public_data 公开附加存储数据
last_message_sent_at 最后消息发送时间
String leaderboardKey;
int page = 1;
Int pageCount = 20;
MiCommplatform.getInstance().loadLeaderBoard(GamActivity.this,leaderboardKey,page,pageCount,new MiResponseHandler()
{
       @Override
       protected void onError( int arg0, JSONObject arg1 )
    {
             alert( GamActivity.this, "onError", "\n sdkstatus:" + arg0 );
       }
       @Override
       protected void onComplete( int arg0, JSONObject arg1 )
    {
              alert( GamActivity.this, "onComplete", "\n sdkstatus:" + arg0 + "\n result:" + arg1 );
    }
} );

useHeart: 在开始每一局(关)游戏之前,扣除体力的操作。

请求参数:

名称 说明
heart 消耗体力数量
返回参数:无
int heart;
MiCommplatform.getInstance().useHeart( GamActivity.this,heart,new MiResponseHandler()
{
    @Override
       protected void onError( int arg0, JSONObject arg1 )
    {
             alert( GamActivity.this, "onError", "\n sdkstatus:" + arg0 );
    }
       @Override
       protected void onComplete( int arg0, JSONObject arg1 )
    {
              alert( GamActivity.this, "onComplete", "\n sdkstatus:" + arg0 + "\n result:" + arg1 );
       }
} );

updateResult: 上传游戏成绩,此接口调用前需调用useHeart接口

请求参数:

名称 说明
score 每局游戏所得分数
leaderboardKey 某个积分榜的key,通过loadGameInfo接口获取
exp 每局游戏所得经验值
publicData 公开附加存储数据,可选参数最大值为1000byte
privateData 私有附加存储数据,可选参数最大值为2000byte

返回参数:无

String leaderboardKey;
int score;
int exp;
byte[] publicData;
byte[] preivateData;
MiCommplatform.getInstance().updateResult(GamActivity.this,leaderboardKey,score,  exp, publicData, privateData, new MiResponseHandler()
{
       @Override
       protected void onError( int arg0, JSONObject arg1 )
    {
             alert( GamActivity.this, "onError", "\n sdkstatus:" + arg0 );
    }
       @Override
       protected void onComplete( int arg0, JSONObject arg1 )
       {
             alert( GamActivity.this, "onComplete", arg1.toString() );
     }
} );

updateResults: 上传多个游戏成绩,此接口调用前需调用useHeart接口

请求参数:

名称 说明
scores 更新多个排行榜的成绩
exp 每局游戏所得经验值
publicData: 公开附加存储数据,可选参数最大值为1000byte
privateData: 私有附加存储数据,可选参数最大值为2000byte

返回参数:无

HashMap< String, Integer > scores;
int exp;
byte[] publicData;
byte[] privateData;
MiCommplatform.getInstance().updateResults(GamActivity.this,scores, exp,publicData, privateData, new MiResponseHandler()
{
      @Override
      protected void onError( int arg0, JSONObject arg1 )
    {
            alert( GamActivity.this, "onError", "\n sdkstatus:" + arg0 );
      }
      @Override
      protected void onComplete( int arg0, JSONObject arg1 )
      {
            alert( GamActivity.this, "onComplete", arg1.toString() );
      }
} );

updateMe: 玩家购买或使用道具后,与服务器同步体力的变化信息。

请求参数:

名称 说明
heart 变化后的体力值
currentHeart 变化前的体力值
privateData 私有附加存储数据,可选参数最大值为2000byte
publicData 私有附加存储数据,可选参数最大值为2000byte

返回参数:无

int heart;
int currentHeart;
byte[] publicData;
byte[] privateData;
MiCommplatform.getInstance().updateMe(GamActivity.this,heart,currentHeart,publicData, privateData, new MiResponseHandler()
{
      @Override
      protected void onError( int arg0, JSONObject arg1 )
      {
            alert( GamActivity.this, "onError", "\n sdkstatus:" + arg0 );
      }
      @Override
      protected void onComplete( int arg0, JSONObject arg1 )
    {
            alert( GamActivity.this, "onComplete", arg1.toString() );
      }
} );

sendGameMessage: 向某玩家赠送体力。

请求参数:

名称 说明
userId 接收者的游戏中心userId,通过loadGameFriends接口获得
message 传到聊天室的消息
gameMessage 游戏中收到的消息
data 用于发送更多的数据
返回参数:无
String userId;
String message;
String gameMsg;
Byte[] data;
ArrayList< Map< String, String >> metaInfo = new ArrayList< Map< String, String >>();
Map< String, String > metaInfoAndroid = new HashMap< String, String >();
metaInfoAndroid.put( "os", "android" );
metaInfoAndroid.put( "executeurl", "" );
metaInfo.add( metaInfoAndroid );
Map< String, String > metaInfoIos = new HashMap< String, String >();
metaInfoIos.put( "os", "ios" );
metaInfoIos.put( "executeurl", "" );
metaInfo.add( metaInfoIos );
MiCommplatform.getInstance().sendGameMessage( activity, userId, false, message, gameMsg, 1, data, metaInfo, new MiResponseHandler()
{
        @Override
        protected void onError( int arg0, JSONObject arg1 )
        {
            MessageUtil.alert( activity, "onError", "\n sdkstatus:" + arg0 );
        }
        @Override
        protected void onComplete( int arg0, JSONObject arg1 )
        {
            MessageUtil.alert( activity, "onComplete", arg1.toString() );
        }
} );
]

loadGameMessage: 读取好友赠送的体力消息列表

请求参数:无

返回参数:

名称 说明
messages 消息列表
消息列表参数
message_id 消息ID
sender_id 发送者的UID
sender_nickname 发送者昵称
sender_profile_image_url 发送者头像
heart 送了几点体力
message 消息内容(本期可以为空)
data 附加消息数据(本期可以为空)
sent_at 赠送体力的时间
MiCommplatform.getInstance().loadGameMessage(GameMessageActivity.this,new MiResponseHandler()
{
        @Override
        protected void onError( int miStatus, JSONObject result )
        {
                MessageUtil.alert( GameMessageActivity.this, "onError", "sdkStatus: " + miStatus + ", result: " + result );
        }
        @Override
        protected void onComplete( int miStatus, JSONObject result )
        {
              if ( !result.has( "messages" ) )
             {
                     Log.e( TAG, "message is null." );
                     return;
              }
              JSONArray messageArray = result.optJSONArray( "messages" );
              if ( messageArray.length() == 0 )
                    MessageUtil.alert( GameMessageActivity.this, "no message" );
              messages.clear();
              Log.i( TAG, "-------- messages" );
              for ( int i = 0, n = messageArray.length(); i < n; i++ )
              {
                 JSONObject message = messageArray.optJSONObject( i );
                    if ( message != null )
                    {
                             messages.add( message );
                 }
                    Log.i( TAG, "-------- messages[" + i + "]" );
                    Log.i( TAG, "message_id" + message.optString( "message_id" ) );
                    Log.i( TAG, "sender_id" + message.optString( "sender_id" ) );
                   Log.i(TAG,"sender_nickname" + message.optString( "sender_nickname" ) );
                    Log.i(TAG,"sender_profile_image_url" + message.optString( "sender_profile_image_url" ) );
                 Log.i( TAG, "heart" + message.optString( "heart" ) );
                    Log.i( TAG, "message" + message.optString("message" ) );
                    Log.i( TAG, "sent_at" + message.optString( "sent_at" ) );
                    String data = message.optString( "data" );
                    if ( data != null )
                    {
                           Log.i( TAG, "data : after- " + data );
                        byte[] decoded = Base64.decode( data, 0 );
                           data = new String( decoded );
                        Log.i( TAG, "data: before-" + data );
                    }
            }
            messageAdapeter.notifyDataSetChanged();
    }
    } );

acceptMessage: 接收体力。

请求参数

名称 说明
messageId 要接收消息的ID,通过loadGameMessage接口获得

返回参数:无

String messageId;
MiCommplatform.getInstance().acceptMessage(GameMessageActivity.this,messageId,new MiResponseHandler()
{
        @Override
        protected void onError( int miStatus, JSONObject result )
        {
            MessageUtil.alert( GameMessageActivity.this, result.toString() );
        }
        @Override
        protected void onComplete( int miStatus, JSONObject result )
        {
        }
} );

acceptAllMessage: 接收全部体力。

请求参数:无

返回参数:无

MiCommplatform.getInstance().acceptAllMessage(GameMessageActivity.this,
          new MiResponseHandler()
{
       @Override
       protected void onError( int miStatus, JSONObject result )
       {
         MessageUtil.alert( GameMessageActivity.this, result.toString());
       }
       @Override
       protected void onComplete( int miStatus, JSONObject result )
       {
       }
} );

messageBlock: 是否允许其他好友向自己赠送体力。

请求参数:

名称 说明
isMessageBlocked 是否允许好友赠送体力

返回参数:无

boolean  isMessageBlocked;
MiCommplatform.getInstance().messageBlock(GamActivity.this,isMessageBlocked,
       new MiResponseHandler()
{
     @Override
       protected void onError( int arg0, JSONObject arg1 )
       {
            alert( GamActivity.this, "onError", "\n sdkstatus:" + arg0 );
       }
       @Override
       protected void onComplete( int arg0, JSONObject arg1 )
       {
            alert( GamActivity.this, "onComplete", arg1.toString() );
       }
} );

sendInviteMessage: 发送邀请好友消息(不建议使用)。

邀请米聊好友玩游戏流程: enter image description here 请求参数:

名称 说明
userId 接收者的游戏中心userId,通过loadGameFriends接口获得(兼容性参数传0即可)
message 消息内容(兼容性参数,消息内容由运营配置)

返回参数:无·

String userId;
String message;
ArrayList< Map< String, String >> metaInfo = new ArrayList< Map< String, String >>();
Map< String, String > metaInfoAndroid = new HashMap< String, String >();
metaInfoAndroid.put( "os", "android" );
metaInfoAndroid.put( "executeurl", "" );
metaInfo.add( metaInfoAndroid );
Map< String, String > metaInfoIos = new HashMap< String, String >();
metaInfoIos.put( "os", "ios" );
metaInfoIos.put( "executeurl", "" );
metaInfo.add( metaInfoIos );
MiCommplatform.getInstance().sendInviteMessage( activity, userId, false, message, metaInfo, new MiResponseHandler()
{
    @Override
       protected void onError( int arg0, JSONObject arg1 )
    {
      if(arg0 == 5200)
      {
       //取消邀请
      }
      else if(arg0 == -107)
      {
       //邀请失败
      }
    }
    @Override
    protected void onComplete( int arg0, JSONObject arg1 )
    {
     //邀请成功
    }
} );

sendInviteMessage 发送邀请好友消息 邀请米聊好友玩游戏流程 enter image description here 请求参数:

名称 说明
title 标题
message 消息内容
imagePath 图片路径
返回参数:无
final String title = "一起来玩游戏吧";
final String message = "亲,赶紧来游戏让我抱抱大腿吧";
final String imagePath = "http://lxcdn.dl.files.xiaomi.net/mfsv2/avatar/s008/p01CveXl9AOC/Qg1BlgmzRbie7P_150.jpg";
MiCommplatform.getInstance().sendInviteMessage( GamActivity.this, title, message, imagePath, new MiResponseHandler()
{
    @Override
    protected void onError( int arg0, JSONObject arg1 )
    {
        MessageUtil.alert( GamActivity.this, "onError", "\n sdkstatus:" + arg0 );
        if ( arg0 == 5200 )
        {
            // 取消邀请
        }
        else if ( arg0 == -107 )
        {
            // 邀请失败
        }
    }
    @Override
    protected void onComplete( int arg0, JSONObject arg1 )
    {
        MessageUtil.alert( GamActivity.this, "onComplete", arg1.toString() );
        if ( arg0 == 0 )
        {
            // 邀请成功
        }
    }
} );

deleteMe: 删除分数(兼容性接口,不建议使用)。

请求参数:无

返回参数:无

MiCommplatform.getInstance().deleteMe(GameMessageActivity.this, new MiResponseHandler()
{
        @Override
     protected void onError( int miStatus, JSONObject result )
        {
            MessageUtil.alert( GameMessageActivity.this, result.toString() );
        }
        @Override
        protected void onComplete( int miStatus, JSONObject result )
        {
        }
} );

shareToMiTalk: 分享消息到米聊广播。

请求参数:

名称 说明
imagePath 图片路径
title 消息标题
message 分享默认文字
返回参数:无·
final String imagePath = Environment.getExternalStorageDirectory() + "/misdktest/testImg.png";
final String title = "大家一起来玩";
final String message = "测试";
MiCommplatform.getInstance().shareToMiTalk( GamActivity.this, imagePath, title, message, new MiResponseHandler()
    {
        @Override
        protected void onError( int arg0, JSONObject arg1 )
        {
            alert( GamActivity.this, "onError", "sdkstatus:" + arg0 );
            if ( arg0 == 5200 )
            {
                // 取消分享
            }
            else if ( arg0 == -107 )
            {
                // 分享失败
            }
        }
        @Override
        protected void onComplete( int arg0, JSONObject arg1 )
        {
            if ( arg0 == 0 )
            {
                // 分享成功
            }
        }
    } );

shareToMiTalkForLargeImg: 分享大图到圈子

请求参数:

名称 说明
imagePath 图片路径
message 分享默认文字
返回参数:无
final String imagePath = Environment.getExternalStorageDirectory() + "/misdktest/testImg.png";
final String message = "测试";
MiCommplatform.getInstance().shareToMiTalkForLargeImg( GamActivity.this, message, imagePath, new MiResponseHandler()
{
    @Override
    protected void onError( int arg0, JSONObject arg1 )
    {
        alert( GamActivity.this, "onError", "sdkstatus:" + arg0 );
        if ( arg0 == 5200 )
        {
            // 取消分享
        }
        else if ( arg0 == -107 )
        {
            // 分享失败
        }
    }
    @Override
    protected void onComplete( int arg0, JSONObject arg1 )
    {
        if ( arg0 == 0 )
        {
            // 分享成功
        }
    }
} );

syncResult: 上传游戏成绩,此接口调用前不需要调用useHeart接口,适合不适用米聊管理体力的游戏上传成绩。

请求参数:

名称 说明
score 分数
leaderboardKey 某个积分榜的key,通过loadGameInfo接口获取
exp 每局游戏所得经验值
publicData 公开附加存储数据,可选参数最大值为1000byte
privateData 私有附加存储数据,可选参数最大值为2000byte

返回参数:无

String leaderboardKey;
int score;
int exp;
byte[] publicData;
byte[] preivateData;
MiCommplatform.getInstance().syncResult(GamActivity.this,leaderboardKey,score,
    exp, publicData, privateData, new MiResponseHandler()
{
      @Override
      protected void onError( int arg0, JSONObject arg1 )
    {
            alert( GamActivity.this, "onError", "\n sdkstatus:" + arg0 );
    }
      @Override
      protected void onComplete( int arg0, JSONObject arg1 )
    {
            alert( GamActivity.this, "onComplete", arg1.toString() );
    }
} );

syncResults: 上传多个游戏成绩,此接口调用前不需要调用useHeart接口,适合不需要米聊管理体力的游戏提交成绩。

请求参数:

名称 说明
scores 更新排行榜的成绩
exp 每局游戏所得经验值
public_data: 公开附加存储数据
private_data: 私有附加存储数据
返回参数:无
HashMap< String, Integer > scores;
int exp;
byte[] publicData;
byte[] privateData;
MiCommplatform.getInstance().syncResults(GamActivity.this,scores, exp,publicData, privateData, new MiResponseHandler()
{
       @Override
    protected void onError( int arg0, JSONObject arg1 )
     {
            alert( GamActivity.this, "onError", "\n sdkstatus:" + arg0 );
    }
    @Override
    protected void onComplete( int arg0, JSONObject arg1 )
    {
            alert( GamActivity.this, "onComplete", arg1.toString() );
    }
} );

checkMiTalkStatus 检查米聊是否安装且登陆了

请求参数:无

返回参数:

名称 说明
code 0:安装并登陆 -1, 米聊有更新,-10001:没有安装-10002:米聊版本过低
message 错误信息
MiCommplatform.getInstance().checkMiTalkStatus( new MiResponseListener()
{
    @Override
    protected void onResponseStatus( int code, String message )
    {
        if ( code == 0 )
            alert( GamActivity.this, "Tip", "米聊已登录" );
        else
            alert( GamActivity.this, "Tip", "米聊不可用" );
    }
} );

joinUnion 申请加入公会

请求参数:

名称 说明
unionId 工会id
reason 加入理由

返回参数:

名称 说明
code 0:申请加入工会成功 -1:申请加入工会失败(重复加入时目前也返回-1)
messgae 错误信息
MiCommplatform.getInstance().joinUnion( unionId, new MiResponseListener()
{
    @Override
    protected void onResponseStatus( int code,String message )
    {
        alert( GamActivity.this, "Tip", "Code:" + code );
    }
} );

checkUnionStatus 查询是否已经在公会中

请求参数:

名称 说明
unionId 工会id

返回参数:

名称 说明
code 0:已加入工会 -1:未加入工会
message 错误信息
MiCommplatform.getInstance().checkJoinedUnion( unionId, new MiResponseListener()
{
    @Override
    protected void onResponseStatus( int code,String message )
    {
        alert( GamActivity.this, "Tip", "Code:" + code );
    }
} );

subscribeVip 关注某个服务号

请求参数

名称 说明
id 服务号id

返回参数:

名称 说明
code 0:关注成功 -1:关注失败
message 错误信息
MiCommplatform.getInstance().subscribeVip( vipId, new MiResponseListener()
{
    @Override
    protected void onResponseStatus( int code, String message )
    {
        alert( GamActivity.this, "Tip", "Code:" + code );
    }
} );

checkVipIsScubscribed 是否关注了某个服务号

请求参数:

名称 说明
id 服务号id

返回参数:

名称 说明
code 0:已关注 -1:未关注
message 错误信息
MiCommplatform.getInstance().checkVipIsScubscribed( vipId, new MiResponseListener()
{
    @Override
    protected void onResponseStatus( int code,String message )
    {
        alert( GamActivity.this, "Tip", "Code:" + code );
    }
} );

getUnionList 获取工会列表

请求参数:无

返回参数:无

MiCommplatform.getInstance().getUnionList( GamActivity.this, new MiResponseHandler()
{
    @Override
    protected void onError( int arg0, JSONObject arg1 )
    {
         alert( GamActivity.this, "", message );
    }
    @Override
    protected void onComplete( int arg0, JSONObject arg1 )
    {
         closeProgerssDialog();
         alert( GamActivity.this, "Tip", arg1.toString() );
    }
} );

getVipList 获取已关注列表

请求参数:无

返回参数:无

MiCommplatform.getInstance().getVipList( GamActivity.this, new MiResponseHandler()
{
    @Override
    protected void onError( int arg0, JSONObject arg1 )
    {
        alert( GamActivity.this, "Tip", "error" );
    }   
    @Override
    protected void onComplete( int arg0, JSONObject arg1 )
    {       
        alert( GamActivity.this, "Tip", arg1.toString() );
    }
} );

openMiTalkUpdateSite 打开米聊下载页面

请求参数:无

返回参数:无

MiCommplatform.getInstance().openMiTalkUpdateSite();

shareToMiTalkForImgAndUrl 图文分享

请求参数:

参数 类型 描述
defulText String 分享时默认文本
title String 标题
imagePath String 小图路径
extraLargeImgPath String 大图路径

返回参数:无

final String defulText = "测试";
final String title = "大家一起来玩";
final String imagePath = "http://lxcdn.dl.files.xiaomi.net/mfsv2/avatar/s008/p01CveXl9AOC/Qg1BlgmzRbie7P_150.jpg";
final String extraLargeImgPath = "http://lxcdn.dl.files.xiaomi.net/mfsv2/avatar/s008/p01CveXl9AOC/Qg1BlgmzRbie7P_150.jpg";
        /*Environment.getExternalStorageDirectory() + "/misdktest/testImg.png"*/;

MiCommplatform.getInstance().shareToMiTalkForImgAndUrl( GamActivity.this, defulText, title, imagePath, extraLargeImgPath, new MiResponseHandler()
    {

        @Override
        protected void onError( int arg0, JSONObject arg1 )
        {
            alert( GamActivity.this, "onError", "\n sdkstatus:" + arg0 );
        }

        @Override
        protected void onComplete( int arg0, JSONObject arg1 )
        {
            alert( GamActivity.this, "onComplete", arg1.toString() );
        }
    } );
}