您的位置 首页 > 数码极客

〈如何打开拼多多通知〉拼多多自动打开通知权限…

你如果装了拼夕夕,并且没有禁止通知, 手机一段时间没用后,重新解锁,你会发现通知栏是这样的:

一堆通知消息轰炸过来。其实不仅仅是拼夕夕,基本上你手机上安装的大部分软件,都会时不时的给你弹出这么一条推送,推送产品,推送视频,推送歌曲.......


我们就来看看这些不厌其烦的东西是怎么过来的。天天烦你,也得了解了解消息推送咋来的吧?知道怎么来的还不行,还得知道如何把你不喜欢的推送干掉。


推送是什么 第1节


推送是一种服务器主动push消息到设备端的行为。推送功能必须有一个客户端和服务器的长连接,因为如果客户端和服务器之间不存在一个长连接那么服务器是无法来主动连接客户端的。推送服务的整体的架构和流程如下:

1.设备和推送服务器建立长连接

2.设备会根据某些规则生成或从推送服务器获取到一个DeviceToken,推送服务器可以根据DeviceToken定位到具体的设备

3.设备会上报DeviceToken到应用服务器(由应用自己完成)

4.应用服务器根据需要调用推送的服务端接口发起推送

5.推送服务器收到推送请求,根据请求中的DeviceToken定位到具体的设备,下发推送通知

6.设备收到推送消息,可以进行通知栏弹窗或者其他行为


推送如何关闭 第2节


推送这个东西啊,对于大部分用户来说,都是不胜其烦的,但是对于商户,对于软件供应商来说,那可是香饽饽啊。你要问为啥?还能为啥,为了钱呗,推送给你的,都是给别人打广告呢(当然也有给自己打广告的哈),赚的都是广告费啊。

如果你不是软件开发者,后面的内容可能对你来说,就有点枯燥呢,你就可以不用往后面看啦,但是你都点进来,不让你带走点啥,感觉有点对不起你啊。那就教教你怎么关闭通知栏推送的消息吧,虽然大部分人可能都已经知道了,但难保有些小白啊

注意:虽然关闭了通知栏消息,其实推送还是会过来的,只不过,不会显示再通知栏,正所谓,眼不见为净,自我安慰安慰了。

Android 关闭推送消息,就拿拼多多来说:设置--》应用管理-》拼多多,这个时候,你应该可以看到这个界面:

关闭允许通知就行啦,这样你就不会再收到这些可恶的推送了。


送走了非开发者,那就来点开发者需要的内容,请继续往下看!


Android和IOS推送实现的区别 第3节


推送功能都是基于长连接的基础是上的。因此维护长连接是推送实现的重点,而维护长连接需要心跳机制。心跳机制原理图如下:

客户端发送一个心跳给服务器,服务器给客户端一个心跳应答,这样就形成客户端服务器的一次完整的握手,这个握手是让双方都知道他们之间的连接是没有断开,客户端是在线的。如果超过一个时间的阈值,客户端没有收到服务器的应答,或者服务器没有收到客户端的心跳,那么对客户端来说则断开与服务器的连接重新建立一个。了解Android和IOS 推送的区别,主要从长连接维护方式来看。


—IOS长连接—


IOS长连接是由系统来维护的,也就是说苹果的IOS系统在系统级别维护了一个客户端和苹果服务器的长链接,IOS上的所有应用上的推送都是先将消息推送到苹果的服务器然后将苹果服务器通过这个系统级别的长链接推送到手机终端上,这样的的几个好处为:

  • 在手机终端始终只要维护一个长连接即可,而且由于这个长链接是系统级别的不会出现被杀死而无法推送的情况。
  • 省电,不会出现每个应用都各自维护一个自己的长连接。
  • 安全,只有在苹果注册的开发者才能够进行推送,等等。


—Android长连接—


Android的长连接是由每个应用各自维护的,但是google也推出了和苹果技术架构相似的推送框架,C2DM,云端推送功能,但是由于google的服务器不在中国境内,其他的原因你懂的。所以导致这个推送无法使用,目前国内要实现推送,只有两种方式:

  • Android开发者自己去维护一个长链接。于是每个应用如果都24小时在线,那么都得各自维护一个长连接,这种电量和流量的消耗是可想而知的。
  • 依赖手机厂商的推送服务。推送的原理都是类似的,但是厂商推送的优势在于这样的长连接可以和自己的手机系统绑定到一起,从而可以不同应用共享同一条长连接,节省了心跳的流量消耗,并且这样的系统级长连接可以不用担心应用被杀导致的应用内长连接断连导致消息推送不可达。

主流的第三方推送平台 第4节


目前市面上,提供厂商提供的推送服务有很多,包括华为推送、小米推送、极光推送等等。但是推送千千万,各有各不同。比如说吧 华为啊,小米啊,都是基于自己的内核系统做了处理,在自家手机里都能等到很好的应用,当然它也对外免费提供(部分收费),但是嘛,效果方面肯定要大写折扣,但是像个推、极光推送这些,需要收费提供,兼容性以及完善性就做的相对比较好了。


—推送平台分类—


主流的推送平台大概分成三类:

  • 手机厂商类:小米推送、华为推送;
  • 第三方平台类:个推推送、极光推送、友盟推送;
  • BAT大厂:阿里云移动推送、腾讯信鸽推送、百度云推送。


—各推送平台比较—


虽然提供推送服务的平台有很多,但每个平台都有自己的优缺点,没法做到完美。通过:安全、稳定、省电省流省成本、体积,这四个方面对对各个平台进行一个大致的对比,结果如下:


—推送平台选择—


具体选择那个平台,这个看业务需求了:

  • 如果对推送量不高,同时需要保证到达率,用户群体精确(手机或华为居多)并且想省钱,可以自己兼容多个手机厂商来处理
  • 但要是推送的量比较大,想要兼容性高,而且还不缺钱,并且有很好的后台监控,可以选择第三方平台
  • 对于BAT大厂的推送方案,优势都不及厂商和第三方,就我个人而言是不推荐的。

怎么接入各个推送平台,直接去各个平台的官网,都有详细的文档,这里就不在赘述了。

注意:推送系统会共享一条推送渠道。这意味着假设你接入了友盟推送,而恰好今日头条也接入了友盟。有一天你的App被杀死了,但这时用户启动了今日头条,那么推送系统也就会通过共享的推送通道顺便把你推送消息送达到手机上,然后还可能把你的进程也唤醒(被“保活”了)。


通知栏消息 第5节


推送最终的效果是,发出消息给客户端,显示消息在通知栏或者相关数据,作为移动开发者,我们来着重看看通知栏相关的知识。


— 通知栏基本形式—


这里借用官网的说明,请细看:

从上面看,很详细了吧,一个基本的通知栏包含了6个部分:小图标、应用名称、通知栏消息时间、大图标、通知消息标题、通知消息内容。其中时间和大图标可选,其他的必须要设置。更多其他类型的通知栏就去参考官网啦

()


—创建通知栏消息—


创建通知栏消息,主要是组装通知栏包含的六个内容,然后通过NotificationManager发送通知,具体实现如下:

No builder = new No(this);builder.setSmallIcon) //必须设置 .setLargeIcon( Bi(), R.drawable.ic_launcher_background)) .setContentText("点击通知消息,打开Activity") //内容 .setContentTitle("测试通知") //标题 .setPriority) //优先级 .setAutoCancel(true); //点击自动取消​// 创建Notification管理实例NotificationManager notificationManager = (NotificationManager) );// 发送通知消息no(NOTIFY_ID,builder.build());​

这样,就可以在手机上显示一个通知栏(android 6.0 以上的手机系统权限设置页面,手动开启通知权限,android 9.0 以上需要设置渠道才能显示,暂时不在讨论范围),点击通知,通知栏就会取消。


—通知栏跳转和监听—


点击通知栏跳转页面以及监听通知栏点击事件都离不开 PendingIntent,讲解之前,我们先看看官网的说明:

从上述描述可以知道,PendingIntent 是对要使用它执行的意图和目标操作的描述, 并且实例可以通过四个方法获取:

1.getActivities(Context context, int requestCode, Intent[] intents, int flags)

2.getActivity(Context context, int requestCode, Intent intent, int flags)

3.getBroadcast(Context context, int requestCode, Intent intent, int flags)

4.getService(Context context, int requestCode, Intent intent, int flags)

根据方法名,我们可以看出,PendingIntent可以暂存 activity,Broadcast以及Service行为,等合适的实际再执行, 什么是合适的时机呢?对的,就是你点击通知栏的时候。


—页面跳转实现—


分析:先创建一个打开Activity的Inent,然后通过getActivity 创建一个PendingIntent的实例,最后将PendingInent 添加到通知栏消息中,具体实现如下:

// 定义 一个消息IDfinal int NOTIFY_ID = 1;// 创建一个打开Activity的 IntentIntent intent = new Inten);// 通过 getActivity 获取一个可以打开Activity 的PendingIntentPendingIntent pendingIntent = PendingIn);​No builder = new No(this);builder.setSmallIcon) .setLargeIcon( Bi(), R.drawable.ic_launcher_background)) .setContentText("点击通知消息,打开Activity") .setContentTitle("测试通知") .setPriority) .setContentIntent(pendingIntent) // 将PendingIntent 添加到Notification中 .setAutoCancel(true);// 创建Notification管理实例NotificationManagerCompat notificationManagerCompat = No(this);// 发送通知消息no(NOTIFY_ID,builder.build());


通过上述代码,会弹出一个通知栏消息,点击就会打开一个Activity页面。


—点击监听实现—


有时,我们点击通知栏时,并不一定打开一个对应的界面,而是执行一个特定的操作,基于页面跳转,我们就可以在PendingIntent中封装一个广播,当点击时发送广播,来达到监听点击事件的效果。具体实现如下:

a.创建一个广播,继承BroadcastReceiver,并在onReceive里面显示一个Toast,如下:

public class NotificationClickReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d("NotificationReceiver","通知栏消息被点击啦"); }}

b.在AndroidMani中注册广播 ,并设置匹配的Action

<receiver android:name=".NotificationClickReceiver"> <intent-filter> <action android:name="com.;></action> </intent-filter></receiver>

c.创建一个打开发送广播的Intent,然后通过getBroadcast获取一个PendingIntent 实例,并将PendingIntent 加入消息中,代码如下:

final String BROADCAST_ACTION_DISC = "com.;;// 定义 一个消息IDfinal int NOTIFY_ID = 2;// 创建一个发送广播的 IntentIntent intent = new Inten);// 设置打开广播匹配的ac(BROADCAST_ACTION_DISC);// 通过 getBroadcast 获取一个可以发送广播 的PendingIntentPendingIntent pendingIntent = PendingIn);​No builder = new No(this);builder.setSmallIcon) //必须设置 .setLargeIcon( Bi(), R.drawable.ic_launcher_background)) .setContentText("点击通知消息,打开Activity") //内容 .setContentTitle("测试通知") //标题 .setContentIntent(pendingIntent) // 将PendingIntent 添加到Notification中 .setPriority) //优先级 .setAutoCancel(true); //点击自动取消​// 创建Notification管理实例NotificationManager notificationManager = (NotificationManager) );// 发送通知消息no(NOTIFY_ID,builder.build());

这样弹出通知栏消息后,点击通知栏消息,就可以在控制台查看日志输出啦。


—通知栏还有啥可以操作?—


还可以获取验证码。现在注册验证都需要验证码,短息发过来,都会在通知栏显示,但是需要自己手动去输入,比较麻烦,可以去监听通知栏消息,当有消息来的时候,就检查是不是自己App发送的验证信息,然后就可以获取验证信息,自动填充。具体操作如下:

a. 监听通知栏消息,需要应用授予读取应用的权限,具体操作如下:

// 获取 已授权的应用列表(获取应用通知权限)String string = Se(getContentResolver(), "enabled_notification_listeners");Sy("zyf 已经允许使用通知权的应用:" + string);// 判断当前应用是否已授权if (!())) { // 若没有授权则跳转到 设置页面授权 startActivity(new Intent( "android.;));}​

b.创建服务用来监听通知栏消息,继承NotificationListenerService,该类有两个方法onNotificationPosted和 onNotificationRemoved ,前者监听通知消息显示,后者监听通知消息删除,实现如下:

public class NotificationService extends NotificationListenerService { @Override public void onNotificationPosted(StatusBarNotification sbn) { (sbn); Log.d("NotificationService","收到推送消息啦"); Notification mNotification = (); if (mNotification != null) { String packageName=();//发送通知的包名 Bundle bundle = mNo; bundle.getString); bundle.getString); Log.d("NotificationService",bundle.toString()); }​ }​ @Override public void onNotificationRemoved(StatusBarNotification sbn) { (sbn); Log.d("NotificationService","推送消息被移除啦"); }}

c. 在AndroidMani中注册服务,并配置Action

<service android:name=".NotificationService" android:permission="android.;> <intent-filter> <action android:name="android.;/> </intent-filter></service>

d.发送一个推送消息,然后点击消息,可看到如下信息:

这样就可以获取到推送的消息,然后找出自己的验证码啦!


正所谓,存在即合理,既然有推送这么个玩意,肯定有它存在的意义,比如新闻类应用给你推送实时的报道,音乐类应用给你推送好听的音乐。。。这些还是很让人舒适的。虽然一直推荐你买东西让人很讨厌,但是你可以关掉啊,关掉它你的世界就清静了。而显示的通知栏可不仅仅这么简单,还有很多丰富多彩的表现形式,有兴趣可以自己了解了解哦!


关于作者:哆啦猫,普元移动端开发工程师,擅长Java,专注于Andriod开发。目前参与Mobile 8.0项目的开发,主要接触RN技术的应用,黏合前端代码 与Android底层之间的交互。

关于EAWorld:微服务,DevOps,数据治理,移动架构原创技术分享。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何打开拼多多通知,拼多多自动打开通知权限,打开拼多多通知权限,拼多多通知怎么打开,苹果怎么打开拼多多通知”边界阅读