web中的消息推送和实时通知怎么做
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web中的消息推送和实时通知怎么做相关的知识,希望对你有一定的参考价值。
Web端 常见的消息推送实际上大多数都是模拟推送,之所以是模拟推送,是因为这种实现并不是服务器主动推送,本质依旧是客户端发起请求,服务端返回数据,起主动作用的是客户端。短轮询:实现上最简单的一种模拟推送方法,原理就是客户端不断地向服务端发请求,如果服务端数据有更新,服务端就把数据发送回来,客户端就能接收到新数据了。
消息推送可以试一试极光。Push 支持开发者直接通过极光推送的控制台,通过地图圈选一个经纬度范围,创建一个虚拟的栅栏围出一个虚拟地理边界,当开发者APP的用户进入、离开这个区域,或在该区域内活动时,设备APP可以自动接收通知,实现准确的消息推送,把有用的信息,在合适的地方,推送给合适的人。
参考技术A web中的消息推送和实时通知怎么做
main()
char a,b,c;
printf("input character a,b,c\n");
scanf("%c %c %c",&a,&b,&c);
printf("%d,%d,%d\n%c,%c,%c\n",a,b,c,a-32,b-32,c-32);
输入三个小写字母,输出其ASCII码和对应的大写字母。
【例4.13】
main()
int a;
long b;
float f;
double d;
char c;
printf("\nint:%d\nlong:%d\nfloat:%d\ndouble:%d\nchar:%d\n",sizeof(a),sizeof(b),sizeof(f),sizeof(d),sizeof(c));
输出各种数据类型的字节长度。
4.6 顺序结构程序设计举例
【例4.14】输入三角形的三边长,求三角形面积。
已知三角形的三边长a,b,c,则该三角形的面积公式为:
,
其中s = (a+b+c)/2本回答被提问者采纳
怎样做点击推送消息,跳转到指定页面
功能说明JPush SDK 收到推送,通过广播的方式,转发给开发者App,这样开发者就可以灵活地进行处理。
这个动作不是必须的。用户有需要才定义 Receiver 类来处理 SDK过来的广播。
如果不做这个动作,即不写自定义 Receiver,也不在 AndroidManifest.xml 里配置这个 Receiver,则默认的行为是:
接收到推送的自定义消息,则没有被处理
可以正常收到通知,用户点击打开应用主界面
接受广播
如果全部类型的广播都接收,则需要在 AndroidManifest.xml 里添加如下的配置信息:
<receiver
android:name="Your Receiver"
android:enabled="true">
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTRATION" />
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
<category android:name="You package Name" />
</intent-filter>
</receiver>
每个 Receiver action 详细解释如下。
Action - cn.jpush.android.intent.REGISTRATION
SDK 向 JPush Server 注册所得到的注册 ID 。
一般来说,可不处理此广播信息。
要深入地集成极光推送,开发者想要自己保存App用户与JPush 用户关系时,则接受此广播,取得 Registration ID 并保存与App uid 的关系到开发者自己的应用服务器上。
使用极光推送提供的别名与标签功能,是更加简单轻便的绑定App用户与JPush用户的方式,请参考文档:别名与标签使用教程。
Intent 参数
JPushInterface.EXTRA_REGISTRATION_ID
SDK 向 JPush Server 注册所得到的注册 全局唯一的 ID ,可以通过此 ID 向对应的客户端发送消息和通知。
Bundle bundle = intent.getExtras();
String title = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
Action - cn.jpush.android.intent.MESSAGE_RECEIVED
收到了自定义消息 Push 。
SDK 对自定义消息,只是传递,不会有任何界面上的展示。
如果开发者想推送自定义消息 Push,则需要在 AndroidManifest.xml 里配置此 Receiver action,并且在自己写的 BroadcastReceiver 里接收处理。
Intent 参数
JPushInterface.EXTRA_TITLE
保存服务器推送下来的消息的标题。
对应 API 消息内容的 title 字段。
对应 Portal 推送消息界面上的“标题”字段(可选).
Bundle bundle = intent.getExtras();
String title = bundle.getString(JPushInterface.EXTRA_TITLE);
JPushInterface.EXTRA_MESSAGE
保存服务器推送下来的消息内容。
对应 API 消息内容的 message 字段。
对应 Portal 推送消息界面上的"消息内容”字段。
Bundle bundle = intent.getExtras();
String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);
JPushInterface.EXTRA_EXTRA
保存服务器推送下来的附加字段。这是个 JSON 字符串。
对应 API 消息内容的 extras 字段。
对应 Portal 推送消息界面上的“自定义内容”。
Bundle bundle = intent.getExtras();
String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
JPushInterface.EXTRA_CONTENT_TYPE
保存服务器推送下来的内容类型。
对应 API 消息内容的 content_type 字段。
Bundle bundle = intent.getExtras();
String type = bundle.getString(JPushInterface.EXTRA_CONTENT_TYPE);
JPushInterface.EXTRA_RICHPUSH_FILE_PATH
SDK 1.4.0 以上版本支持。
富媒体通消息推送下载后的文件路径和文件名。
Bundle bundle = intent.getExtras();
String file = bundle.getString(JPushInterface.EXTRA_RICHPUSH_FILE_PATH);
JPushInterface.EXTRA_MSG_ID
SDK 1.6.1 以上版本支持。
唯一标识消息的 ID, 可用于上报统计等。
Bundle bundle = intent.getExtras();
String file = bundle.getString(JPushInterface.EXTRA_MSG_ID);
Action - cn.jpush.android.intent.NOTIFICATION_RECEIVED
收到了通知 Push。
如果通知的内容为空,则在通知栏上不会展示通知。但是,这个广播 Intent 还是会有。开发者可以取到通知内容外的其他信息。
Intent 参数
JPushInterface.EXTRA_NOTIFICATION_TITLE
保存服务器推送下来的通知的标题。
对应 API 通知内容的 n_title 字段。
对应 Portal 推送通知界面上的“通知标题”字段。
Bundle bundle = intent.getExtras();
String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);
JPushInterface.EXTRA_ALERT
保存服务器推送下来的通知内容。
对应 API 通知内容的 n_content 字段。
对应 Portal 推送通知界面上的“通知内容”字段。
Bundle bundle = intent.getExtras();
String content = bundle.getString(JPushInterface.EXTRA_ALERT);
JPushInterface.EXTRA_EXTRA
SDK 1.2.9 以上版本支持。
保存服务器推送下来的附加字段。这是个 JSON 字符串。
对应 API 通知内容的 n_extras 字段。
对应 Portal 推送通知界面上的“自定义内容”字段。
Bundle bundle = intent.getExtras();
String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
JPushInterface.EXTRA_NOTIFICATION_ID
SDK 1.3.5 以上版本支持。
通知栏的Notification ID,可以用于清除Notification
Bundle bundle = intent.getExtras();
int notificationId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
JPushInterface.EXTRA_CONTENT_TYPE
保存服务器推送下来的内容类型。
对应 API 消息内容的 content_type 字段。
Portal 上暂时未提供输入字段。
Bundle bundle = intent.getExtras();
String type = bundle.getString(JPushInterface.EXTRA_CONTENT_TYPE);
JPushInterface.EXTRA_RICHPUSH_HTML_PATH
SDK 1.4.0 以上版本支持。
富媒体通知推送下载的HTML的文件路径,用于展现WebView。
Bundle bundle = intent.getExtras();
String fileHtml = bundle.getString(JPushInterface.EXTRA_RICHPUSH_HTML_PATH);
JPushInterface.EXTRA_RICHPUSH_HTML_RES
SDK 1.4.0 以上版本支持。
富媒体通知推送下载的图片资源的文件名,多个文件名用 “,” 分开。 与 “JPushInterface.EXTRA_RICHPUSH_HTML_PATH” 位于同一个路径。
Bundle bundle = intent.getExtras();
String fileStr = bundle.getString(JPushInterface.EXTRA_RICHPUSH_HTML_RES);
String[] fileNames = fileStr.spilt(",");
JPushInterface.EXTRA_MSG_ID
SDK 1.6.1 以上版本支持。
唯一标识通知消息的 ID, 可用于上报统计等。
Bundle bundle = intent.getExtras();
String file = bundle.getString(JPushInterface.EXTRA_MSG_ID);
Action - cn.jpush.android.intent.NOTIFICATION_OPENED
用户点击了通知。
一般情况下,用户不需要配置此 receiver action。
如果开发者在 AndroidManifest.xml 里未配置此 receiver action,那么,SDK 会默认打开应用程序的主 Activity,相当于用户点击桌面图标的效果。
如果开发者在 AndroidManifest.xml 里配置了此 receiver action,那么,当用户点击通知时,SDK 不会做动作。开发者应该在自己写的 BroadcastReceiver 类里处理,比如打开某 Activity 。
Intent 参数
JPushInterface.EXTRA_NOTIFICATION_TITLE
保存服务器推送下来的通知的标题。
对应 API 通知内容的 n_title 字段。
对应 Portal 推送通知界面上的“通知标题”字段。
Bundle bundle = intent.getExtras();
String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);
JPushInterface.EXTRA_ALERT
保存服务器推送下来的通知内容。
对应 API 通知内容的n_content字段。
对应 Portal 推送通知界面上的“通知内容”字段。
Bundle bundle = intent.getExtras();
String content = bundle.getString(JPushInterface.EXTRA_ALERT);
JPushInterface.EXTRA_EXTRA
SDK 1.2.9 以上版本支持。
保存服务器推送下来的附加字段。这是个 JSON 字符串。
对应 API 消息内容的 n_extras 字段。
对应 Portal 推送通知界面上的“自定义内容”字段。
Bundle bundle = intent.getExtras();
String type = bundle.getString(JPushInterface.EXTRA_EXTRA);
JPushInterface.EXTRA_NOTIFICATION_ID
SDK 1.3.5 以上版本支持。
通知栏的Notification ID,可以用于清除Notification
Bundle bundle = intent.getExtras();
int notificationId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID
JPushInterface.EXTRA_MSG_ID
SDK 1.6.1 以上版本支持。
唯一标识调整消息的 ID, 可用于上报统计等。
Bundle bundle = intent.getExtras();
String file = bundle.getString(JPushInterface.EXTRA_MSG_ID);
代码示例
public void onReceive(Context context, Intent intent)
Bundle bundle = intent.getExtras();
Log.d(TAG, "onReceive - " + intent.getAction());
if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction()))
else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction()))
System.out.println("收到了自定义消息。消息内容是:" + bundle.getString(JPushInterface.EXTRA_MESSAGE));
// 自定义消息不会展示在通知栏,完全要开发者写代码去处理
else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction()))
System.out.println("收到了通知");
// 在这里可以做些统计,或者做些其他工作
else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction()))
System.out.println("用户点击打开了通知");
// 在这里可以自己写代码去定义用户点击后的行为
Intent i = new Intent(context, TestActivity.class); //自定义打开的界面
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
else
Log.d(TAG, "Unhandled intent - " + intent.getAction());
参考技术A 跳转到指定界面,可以使用onnewintent方法,参考我的这篇博文:http://blog.csdn.net/nihaoqiulinhe/article/details/50697301 参考技术B
APP在进行消息推送相关的跳转设置时,安卓和ios的设置方式不相同;离线消息和在线消息的设置也不同。以个推消息推送为例:
一,安卓在线收到个推消息
①若推送的是透传模板消息,则可以在透传内容中设置自定义参数值,开发者自行在透传回调中根据相关自定义参数值处理后续内部页面跳转问题。
②若推送的是通知模板消息:
1、click_type设置intent类型,intent里按要求设置App内部的Activity路径,点击通知后跳转到设置的Activity页面。
2、click_type设置payload类型,payload里设置自定义参数值,点击通知后,payload里的内容传进客户端透传回调,开发者在该回调中自行处理跳转。
二,安卓离线收到厂商消息
push_channel(或老版本-notify)消息体中,click_type设置intent类型,intent里按要求设置App内部的Activity路径,点击通知后跳转到设置的Activity页面。
三,iOS点击APNs通知跳转应用内对应页面
新版服务端设置苹果离线消息体代码中通过payload参数去设置,参照添加APNs自定义参数,当客户端收到APNs通知栏提醒并点击会触发客户端 GeTuiSdkDidReceiveNotification方法,获取payload参数数据,获取到之后开发者可以自己解析处理跳转。( 老版本服务端参照java的代码payload.addCustomMsg("由客户自定义消息key", "由客户自定义消息value"); )
"ios":
"type":"notify",
"payload":"自定义消息",
"aps":
"alert":
"title":"通知标题",
"body":"通知内容"
,
"content-available":0,
"sound":"default"
,
"auto_badge":"+1"
扩展场景:部分用户希望效果是先打开APP首页,再跳转到指定的页面;该场景对应的是在TransmissionContent中添加对应参数,客户端收到通知后打开app首页,在 GeTuiSdkDidReceiveSlience 中拿到TransmissionContent的内容,然后处理跳转。以上答案希望对您有所帮助,如果您对个推消息推送感兴趣,欢迎您前往个推开发者中心免费注册体验。
以上是关于web中的消息推送和实时通知怎么做的主要内容,如果未能解决你的问题,请参考以下文章