当前位置: 首页 > news >正文

微软云技术Windows Azure专题(三):如何利用Mobile向Windows商店应用推送消息(2)...

上一讲我们讲了如何利用Mobile向Windows商店应用推送消息。可是用心的朋友会发现,这个推送只能对自己当前的电脑有效,并不能推送给所有安装了这个应用的用户。

哈哈,其实这里边用到了通道的原理。当应用启动的时候,会向WindowsAzure服务注册当前机器和服务器的连接通道。然后Windows Azure服务根据通道,将信息发送给用户。

试想一下,如果没有通道,那么云服务就要搜索全球所有设备安装的所有应用,然后一个一个的判断是否为目标应用来进行下一步推送的话,那服务器可真受不了了。

下面进入正题:

如果想让Mobile Service给所有使用了当前应用的的设备发送推送的话,就需要记录下来每一台设备的通道。然后根据记录的通道逐个发送推送就行了。

先来明确一下大体上要做哪些步骤:

1.上一讲的所有操作。

2.建立一个通道表(Channel)

3.修改Windows商店应用的代码

4.修改Mobile Service的脚本

5.测试应用

第一步:上一讲的所有操作

不罗嗦了,大家自己到上一讲看吧

第二步:建立一个通道表(Channel)

1.进入Mobile Service面板

2.点击数据,然后点击创建

3.建立一个名为Channel的表,该表会自动在数据库中建立

第三步:修改Windows商店应用的代码

1.将MainPage.xaml.cs中的TodoItem修改成

public class TodoItem
{
    public int Id { get; set; }


[JsonProperty(PropertyName = "text")]
public string Text { get; set; }


[JsonProperty(PropertyName = "complete")]
public bool Complete { get; set; }


}


2.将MainPage.xaml.cs中的ButtonSave函数修改成

private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
    var todoItem = new TodoItem { Text = TextInput.Text };
    InsertTodoItem(todoItem);
}

3.在MainPage.xaml.cs中添加一个Channel类

public class Channel
{
    public int Id { get; set; }


[JsonProperty(PropertyName = "uri")]
public string Uri { get; set; }


}

4.修改App.xaml.cs中的AcquirePushChannel函数

private async void AcquirePushChannel()
{
   CurrentChannel = 
       await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();


   IMobileServiceTable<Channel> channelTable = App.MobileService.GetTable<Channel>();
   var channel = new Channel { Uri = CurrentChannel.Uri };
   await channelTable.InsertAsync(channel);
}


第三步:修改Mobile Service的脚本

1.点击数据中的Channel表

2.修改表的插入函数

3.将Channel的插入函数改为

function insert(item, user, request) {
    var channelTable = tables.getTable('Channel');
    channelTable
        .where({ uri: item.uri })
        .read({ success: insertChannelIfNotFound });
    function insertChannelIfNotFound(existingChannels) {
        if (existingChannels.length > 0) {
            request.respond(200, existingChannels[0]);
        } else {
            request.execute();
        }
    }
}

4.修改TodoItem表的插入函数

5.将TodoItem的插入函数改为

function insert(item, user, request) {
    request.execute({
        success: function() {
            request.respond();
            sendNotifications();
        }
    });


function sendNotifications() {
    var channelTable = tables.getTable('Channel');
    channelTable.read({
        success: function(channels) {
            channels.forEach(function(channel) {
                push.wns.sendToastText04(channel.uri, {
                    text1: item.text
                }, {
                    success: function(pushResponse) {
                        console.log("Sent push:", pushResponse);
                    }
                });
            });
        }
    });
}
}


第五步:测试应用

如果你有多台设备,并且都部署了该应用的话。你就会发现,每当你向表中插入数据的时候,所有的设备都将接收到右上角的Toast推送消息。



相关文章:

  • centos 6.2 关闭 IPV6
  • hdu1166敌兵布阵
  • WinForm_1初识WinForm编程
  • 变参函数——stdarg——printf——variable and function
  • 新视野OJ 2818: Gcd
  • 微软云技术Windows Azure专题(四):如何利用Mobile Service的计划程序连接到Service Bus定时推送消息...
  • Python 入门教程 16 ---- Introduction to Bitwise Operators
  • table与div对待边框的一点儿区别
  • 浅析人脸检测之Haar分类器方法
  • 震撼!!
  • Linux基本操作 7----- vi操作的详细信息
  • 基准电压——Reference voltage
  • linux下alias命令
  • 黑马程序员_properties,打印流,合并流,分割流
  • 软件架构师的12项修炼_读书纪要_P3商务技能修炼
  • 【刷算法】求1+2+3+...+n
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • angular组件开发
  • CAP理论的例子讲解
  • CSS中外联样式表代表的含义
  • C语言笔记(第一章:C语言编程)
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • js 实现textarea输入字数提示
  • js算法-归并排序(merge_sort)
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • MySQL的数据类型
  • PHP那些事儿
  • SpringBoot 实战 (三) | 配置文件详解
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 闭包--闭包作用之保存(一)
  • 浮现式设计
  • 入门级的git使用指北
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 原生Ajax
  • 智能合约Solidity教程-事件和日志(一)
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #define,static,const,三种常量的区别
  • #Z0458. 树的中心2
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • ()、[]、{}、(())、[[]]命令替换
  • (09)Hive——CTE 公共表达式
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (离散数学)逻辑连接词
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (篇九)MySQL常用内置函数
  • (全注解开发)学习Spring-MVC的第三天
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务