.NET使用IKVM调用小米推送教程

.NET使用IKVM调用小米推送教程

  近日要开发一款APP的推送功能,鉴于前端使用的是HBuilder而IDE中集成了第三方推送服务商“个推”好吧为了方便就你了,可是开发完才发现由于MIUI的深度优化APP退到后台后APP收不到推送消息,前台运行时虽能收到消息点击通知却也没有任何反映,这是要玩我么?

与客服多方沟通无果后只能放弃了,毕竟MIUI也好大的用户量!好在看到HBuilder中同时集成了小米推送,好了自家的推送总该不会屏蔽了吧!


  那么先到小米开放平台注册开发者账号吧,注册完要审核!那么我先去下载SDK看看文档什么的吧!


  妈蛋,老子当时就傻眼了 竟然没有我.NET的,赤裸裸的歧视啊有木有!

  罢了,好在我.NET还有IKVM.NET还可以调用JAVA。先尝试一下吧,到IKVM官网下载,下载好解压后得到以下文件

  好了,话不多说 开始动真格的!

  要在.NET中调用当然是要先把JAVA的JAR包转成.NET可调用的dll文件所以我们先把小米提供的JAVA版SDK下载下来

好了现在开始转换

  第一步,先进入IKVM的bin目录下\ikvm-7.2.4630.5\bin,按住shift单击鼠标右键选择“在此处打开命令窗口”,或者cmd下cd到IKVM的bin目录下,其实添加系统环境变量也是可以的,但是我并不打算这么搞毕竟只用一次!

打开后输入ikvm如果看到如下信息我们就可以进行下一步了

先看看小米推送JAVA版的SDK,下载下来发现里边有两个JAR包

下面这个MiPush_SDK_Server_2_2_18.jar应该就是小米推送要使用的了,上面这个是推送服务引用的JSON包所以我们先转换这个JSON包

转换要用到命令 -target:library 

使用方法: ikvmc -target:library F:/sdk/json-simple-1.1.1.jar

好了现在看到IKVM的bin目录下已经有了转换成功的json-simple-1.1.1.dll文件

既然知道了MiPush_SDK_Server_2_2_18.jar引用了json-simple-1.1.1.jar包那么我们在转换的时候也要指定引用,下面看我操作!

在这里我们要用到刚才生成的json-simple-1.1.1.dll还是上边用到的转换指令不过要指定引用加上-r参数后边是要引用的dll所在路径

ikvmc -target:library F:\sdk\MiPush_SDK_Server_2_2_18.jar -r:F:\ikvm-7.2.4630.5\bin\json-simple-1.1.1.dll

OK提示文件已经输出,有两个警告暂且忽略

现在两个dll已经转换完成,不过却并不是只添加这两个引用就完了,我这里先用反编译工具看了一下这个DLL都引用了哪些IKVM组件

现在看到这里只有这四个,好了现在在IKVM的bin目录下找到这几个文件和前面生成的两个dll

可以看到这些就是我们要引入到项目中的

注意,这并不能确定是不是引用完了,我们先写代码到底还少不少东西咱们下边接着看!

我这里用的WebAPI,先写一个来看看吧,具体参数什么的!自己去看官方文档吧,我就不详解了!我代码有注释凑合看吧!

          public HttpResponseMessage Post()

        {

            try

            {

                Constants.useOfficial();//正式环境

                //Constants.useSandbox();//测试环境,只针对IOS

                string messagePayload = "这是一个消息";

                string title = "通知标题";

                string description = "通知说明"+DateTime.Now;

                #region 安卓发送

                Sender androidSender = new Sender("HGdyO*******QnCEGA==");//你的AppSecret

                     com.xiaomi.xmpush.server.Message androidMsg = new com.xiaomi.xmpush.server.Message.Builder()

                    .title(title)

                    .description(description)//通知栏展示的通知描述

                    .payload(messagePayload)//透传消息

                    .passThrough(0)//设置是否透传1:透传, 0通知栏消息

                          .notifyId(new java.lang.Integer(Convert.ToInt32((DateTime.UtcNow - new DateTime(1970, 1, 1,0, 0, 0, 0)).TotalSeconds)))//取时间戳,避免通知覆盖

                    .restrictedPackageName("com.fawei.demo")//包名

                    .notifyType(new java.lang.Integer(1)) //使用默认提示音提示

                    .notifyType(new java.lang.Integer(2)) //使用默认震动

                    .notifyType(new java.lang.Integer(3)) //使用默认LED灯光

                    .timeToLive(3600000 * 336)//服务器默认保留两周毫秒

                    //.extra("key", "value")//字符数不能超过1024最多十组

                    .build();

                com.xiaomi.xmpush.server.Result androidPushResult = androidSender.broadcastAll(androidMsg, 3);

                #endregion

                result.rows = androidPushResult;

            }

            catch (Exception exception)

            {

                result = new Result(exception.Message);

            }

            return JsonHelper.ToJson(result);

        }

代码是写完了只发安卓的出来吧,毕竟我代码垃圾不想献丑,到底能不能成功发送通知呢F5走起





But,没那么容易我们看到还缺少了一个IKVM.OpenJDK.Text.dll引用,好了IKVM的bin下边找到它添加引用到项目中吧!

再来一次

看到了吗,终于成功了!

其实你也可以引用IKVM的bin下所有的dll文件,但是我并不想那么做.没有为什么,就是不想!

当然你也可以用这种方法调用其他的JAVA代码,如果你也Get到了那就分享给其他人吧!


回复列表



回复操作

正在加载验证码......

请先拖动验证码到相应位置

发布时间:2017-03-07 15:57:16

修改时间:2017-07-13 16:17:40

查看次数:2947

评论次数:10

TA的文章总数

46