-
2021-05-04 04:52:58
新建一个 jpush对象,在循环里给多个registrationid发推送,其中一个遇到 “没有满足条件的推送目标”,是不是就会崩溃了?
情况是:我之前已经用了一个极光推送key;后来因为更换苹果账号的原因,在后台新建了一个应用,换了一个key。
但是在服务器上,仍然保存有 旧的极光推送key 产生的registrationid。
//刚刚遍历了数据表,比方说得到了5条数据,其中第1、5条数据的registrationid是对的,可以发送成功;后面的第2、3、4条数据的registrationid是旧的key产生的,给这些registrationid,就会遇到“没有满足条件的推送目标”。
$jpushClient = new \JPush ....//新建一个jpush对象
foreach ($data as $rol => $row) {
$jpushClient->push()->setPlatform('all')->addRegistrationId($row['registrationid'])->setNotificationAlert(“...”)->setOptions(null,null,null,true,null)->send();
}
//我看到第一条发送成功;第二条推送发送失败:“发送失败(errcode:1011,errmsg:没有满足条件的推送目标)”。然后这个循环就停止了。
//导致第5条registrationid,本来是对的,却不能给它发推送。
然后我在浏览器里调用这个方法,发现报 authen failed 错误,在 PushPayload.php 577行。
所以想问问,在发送第二条推送,遇到(errcode:1011,errmsg:没有满足条件的推送目标),是不是会导致崩溃?这个应该怎么解决?
我如果把 PushPayload.php 577行 注释掉,//throw new APIRequestException($response);
发现整个循环可以走通。请问可以这样处理吗?
更多相关内容 -
mac给苹果服务器发推送信息
2013-06-03 16:51:14mac给苹果服务器发推送信息 -
Bark – 给自己的 iPhone 发推送提醒,简单开源且免费
2022-01-26 16:43:26Bark 是一款纯推送提醒服务,主要用来给自己的 iPhone 发送自定义内容的推送,可以是文字、链接,不提供历史记录功能,阅后即焚。 一、bark的应用场景 笔者最近有个需求,比如偶尔的快递箱取件码,如果能放在屏幕上...Bark 是一款纯推送提醒服务,主要用来给自己的 iPhone 发送自定义内容的推送,可以是文字、链接,不提供历史记录功能,阅后即焚。
一、bark的应用场景
笔者最近有个需求,比如偶尔的快递箱取件码,如果能放在屏幕上显示,阅后即焚……又或者青龙面板的一些登陆信息,登陆后在手机端进行提示,仅仅是提示就行,不留痕迹,不占空间,相当完美。
如图:
安装 Bark 应用之后,会得到一个示例页面,可以直接拿来就用,只需要在浏览器中打开链接,修改后面的推送内容就行了。
而青龙面板自带bark设置界面,只需要把上图 URL 前面的部分填入扩展设置,就能在登陆青龙面板时自动发送通知内容了。
另外,由于 Bark 的客户端与服务端均开源,所以对于敏感数据,可以参考第二步自行部署服务,所有的数据将只在 你的手机、你的服务器、Apple推送服务器之间传输。二、部署bark私有服务器
笔者习惯在docker上搭建各类服务,安全,简单,高效。本次也才用docker方式进行部署。
1.docker中安装bark-server
在docker中运行
docker run -dt --name bark -p 8080:8080 -vpwd
/bark-data:/data finab/bark-server
验证是否启动成功:
[root@YUN8526857 ~]# curl localhost:8080/ping
{“code”:200,“data”:{“version”:“1.0.0”},“message”:“pong”}
如上提示code 200代表安装成功。
2.测试
安装完毕后进行连通测试
curl http://0.0.0.0:8080/ping
3.客户端设置:
在AppStore下载bark客户端,填入服务器地址:
复制app生成的token链接:
测试发送:
回车后,手机端即可收到推送消息。
三、总结
比起 Pushover 这一类定价高昂的推送服务,免费的 Bark 降低了我们的使用成本。得益于其开源的特性,技术型玩家也可以用它来实现各种想象。需要注意的一点是,Bark 的推送消息是一次性的,它不会替你存储历史记录。因此,如果你用 Bark 推送了重要的信息,要记得及时保存。笔者觉得如果能发送图片就好了,不过…那样应用又会「重了」起来。 -
C#企业微信推送.rar
2020-09-21 18:04:27C# 实现的企业微信推送消息,企业微信给用户推送寸文字消息。图文消息等。 系统采用.net 4.0开发。vs2013版本。修改配置文件的企业id即可使用。非常方便。代码注释齐全。 -
lede-openwrt-微信推送.zip
2019-05-26 23:43:12自从用了老毛子固件中的微信推送,就再也放弃不了了,由于路由器的性能不够,改换LEDE软路由的门厅,但是LEDE软路由中又没有微信推送相关的功能,实在是太不方便了,于是在网上四处寻找软路由的推送脚本,可惜有关软... -
C# 钉钉消息推送 调用钉钉SDK实现
2021-07-23 14:08:50C# 钉钉消息推送 调用钉钉SDK实现 -
php实现微信公众号主动推送消息
2020-10-23 01:27:02主要介绍了php实现微信公众号主动推送消息的方法,PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制,需要的朋友可以参考下 -
微信推送功能实现方式图文详解
2021-01-02 18:24:49服务号:企业认证(营业执照),沙箱环境测试主动给用户发消息(推送),用户要接收到推送消息前提是需要关注对应的服务号才行 企业号 微信小程序 微信推送的流程: 微信沙箱环境:... -
RabbitMQ实现Android消息推送.zip
2019-12-25 19:39:11基于SpringBoot、RabbitMQ的Android消息推送平台搭建。亲测可用。有的公司对所要推送的消息保密要求比较高,不希望被第三方看到,可以使用此种方式进行消息推送。如果所要推送的人群比较多,可以搭建RabbitMQ集群... -
php基于Redis消息队列实现的消息推送的方法
2020-10-17 17:07:22主要介绍了php基于Redis消息队列实现的消息推送的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
C#实现推送钉钉消息的方法示例
2020-08-26 08:36:35主要介绍了C#实现推送钉钉消息的方法,结合实例形式分析了C#使用钉钉API实现消息推送的相关操作技巧与注意事项,需要的朋友可以参考下 -
邮件定时推送
2019-06-10 01:11:30NULL 博文链接:https://lbovinl.iteye.com/blog/2337899 -
利用python推送消息到钉钉群
2019-07-04 16:30:51在钉钉群中添加机器人,通过该机器人往群里发消息,此代码默认为文本内容,首先需要在群众添加机器人,得到这个机器人的url -
企业微信发送推送消息完整版
2018-06-26 10:52:06企业微信发送推送消息以及上传媒体文件完整代码及测试,jdk1.6+ecplise -
Android手机端小米推送Demo解析和实现方法
2021-01-05 16:40:06由于最近项目要用到Android的消息推送,关于Android推送的解决方案有很多种,有C2DM,轮询, SMS,MQTT协议,XMPP协议和第三方平台,经过我们对项目需求的考虑之后我们选择了第三方平台推送的小米推送,下面就是小米... -
springboot集成websocket实现消息的主动推送
2018-12-20 11:09:41springboot集成websocket实现消息的主动推送,包含一对一以及通知所有在线用户 -
.net websocket 消息推送
2017-12-21 13:22:24.net websocket 消息推送 该程序用vs2013编写的 主要看代码 别的版本都可仿照 适合初学者使用 -
push-umeng:友盟消息推送 node sdk实现
2021-05-29 21:54:55友盟推送Node服务 根据友盟提供的推送服务实现的 Node 版SDK。支持友盟通知栏推送功能,欢迎大家使用。 npm install push-umeng --save-dev 实例 const UMeng = require('push-umeng'); const umeng = new UMeng({ ... -
MT4开平仓实时消息推送系统1.0 免费版.rar
2020-08-27 10:32:55实时监测订单状态,一旦有开仓、平仓、挂单或修改了止损止盈等交易动作,系统将会第一时间以邮件、手机MT4终端及QQ方式消息推送通知。 -
mac 消息推送工具
2014-05-26 13:41:56mac 向iphone等发送消息推送的工具,需要p12证书和证书密码 -
jpush极光推送全平台单发、群发(正式环境)
2018-03-22 18:10:29jpush极光推送全平台单发、群发(正式环境),下载后将JPushUtil.java中的APP_KEY、MASTER_SECRET换成自己的。 备注:没必要下载,下载demo然后增加 .setOptions(Options.newBuilder() .setApnsProduction(true) .... -
友盟推送自定义通知声音
2019-11-21 15:47:37友盟推送支持自定义通知声音,在Android8.0以下,就很简单: 在您项目的res/raw/下放置命名为umeng_push_notification_default_sound。若无此文件,则默认使用系统的Notification声音 在Android8.0以上机型,那就...友盟推送支持自定义通知声音,在Android8.0以下,就很简单:
在您项目的res/raw/下放置命名为umeng_push_notification_default_sound。若无此文件,则默认使用系统的Notification声音
在Android8.0以上机型,那就需要自定义通知了,因为android8.0以上的Notification引入了Channel的概念,声音是定义在Channel里面的,所以我们需要重写的 UmengMessageHandler 的 getNotification方法,给大家写了个例子参考:
public static final String SOUND_PATH = "android.resource://com.test.demo/raw/umeng_push_notification_default_sound"; UmengMessageHandler messageHandler = new UmengMessageHandler() { @Override public Notification getNotification(Context context, UMessage msg) { Uri soundUri = Uri.parse(SOUND_PATH); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel("default", "Default_Channel", NotificationManager.IMPORTANCE_HIGH); channel.setSound(soundUri, Notification.AUDIO_ATTRIBUTES_DEFAULT); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); if (notificationManager != null) { notificationManager.createNotificationChannel(channel); } } NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "default"); RemoteViews myNotificationView = new RemoteViews(context.getPackageName(), R.layout.notification_view); myNotificationView.setTextViewText(R.id.notification_title, msg.title); myNotificationView.setTextViewText(R.id.notification_text, msg.text); myNotificationView.setImageViewBitmap(R.id.notification_large_icon, getLargeIcon(context, msg)); myNotificationView.setImageViewResource(R.id.notification_small_icon, getSmallIconId(context, msg)); builder.setContent(myNotificationView) .setSmallIcon(getSmallIconId(context, msg)) .setSound(soundUri) .setTicker(msg.ticker) .setAutoCancel(true); return builder.build(); } };
其中 notification_view 的自己写的通知的样式布局,给大家贴一下代码:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="#ffffff" android:layout_height="64dp"> <RelativeLayout android:id="@+id/upush_notification1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="10dp" android:layout_marginTop="10dp"> <ImageView android:id="@+id/notification_large_icon" android:layout_width="48dp" android:layout_height="48dp" android:layout_marginLeft="10dp" android:src="@drawable/ic_launcher" android:scaleType="fitXY" /> <TextView android:id="@+id/notification_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="3dp" android:layout_toRightOf="@+id/notification_large_icon" android:maxLines="1" android:text="Title" android:textColor="#000000" android:textSize="16sp" /> <TextView android:id="@+id/notification_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/notification_title" android:layout_marginLeft="10dp" android:layout_marginTop="3dp" android:layout_toRightOf="@+id/notification_large_icon" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="false" android:fadingEdge="horizontal" android:singleLine="true" android:text="Message" android:textColor="#000000" /> <requestFocus /> </RelativeLayout> <RelativeLayout android:id="@+id/upush_notification2" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone"> <ImageView android:id="@+id/notification_small_icon" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" /> </RelativeLayout> </RelativeLayout>
写完自定义的Notification之后,通过友盟推送的 PushAgent set 一下就可以了:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { mPushAgent.setMessageHandler(messageHandler); }
打完收工,在友盟后台推送一条试一下就可以了
-
springboot实现微信模板消息推送
2019-07-04 17:35:04springboot实现微信模板消息推送,包含微信端代码。简单封装,方便二次开发! -
SQL SERVER 微信推送消息功能
2017-09-20 18:03:56实现 SQL SERVER 数据库中的微信推送功能,可以将一些报警消息发送到微信讨论组或者微信订阅号、公众号、服务号,需要有认证的微信订阅号或者微信服务号 -
thinkphp5.0微信公众号推送消息
2019-01-26 15:28:21thinkphp 5.0 对接微信公众号,向指定用户发送模板消息 -
java实现推送钉钉消息(带图片,连接)demo
2020-05-28 09:40:05java后台推送钉钉卡片消息带图片已经连接一个简单demo,需要更改为自己的AgentId,AppSecret,运行main方法即可 -
java开发小程序和微信消息推送后台
2021-06-13 11:40:22本课程将带领大家使用java实现微信公号和小程序的推送功能。 本节课你能学到以下知识点 1, 实战入门java后台的开发 2,学会springboot 3,微信公号模版推送功能的实现 4,小程序推送的实现 5,入门小程序开发... -
Android开发-在Android应用里集成友盟消息推送SDK的实现(兼容小米、华为、魅族机型离线推送)
2018-09-30 13:09:52最近由于项目的功能需求的需要,需要在Android应用集成消息推送的功能,而目前市面上的第三方消息推送除了友盟推送外,还有极光推送、小米推送、个推以及信鸽(腾讯)推送等。当时本人对比各大第三方的消息推送进行...前 言
最近由于项目的功能需求的需要,需要在Android应用集成消息推送的功能,而目前市面上的第三方消息推送除了友盟推送外,还有极光推送、小米推送、个推以及信鸽(腾讯)推送等。当时本人对比各大第三方的消息推送进行了测试,觉得友盟消息推送集成简单,推送消息的送达率比较高以及即时。而且支持深度优化过的Android系统的国产手机(小米、华为、魅族)应用的进程被“杀死”的情况下能及时送达推送。
集成前的工作
- 在友盟+(友盟+官网)的后台注册账号并申请认证成为开发者,认证通过后选择“消息推送(U-Push)”业务后创建应用了(注意:应用的包名必须与AndroidStudio创建的包名一致,否则推送无法送达),创建应用后把应用的AppKey和Umeng Message Secret记录下来。(如下图)
- 在小米消息推送、华为消息推送以及魅族消息推送渠道申请相应的秘钥后在友盟后台填写相应的配置信息。(如下图)
友盟消息推送SDK的集成
在AndroidStudio的Gradle的dependencies{…}下添加以下依赖:
// PushSDK必须依赖基础组件库,所以需要加入对应依赖 implementation 'com.umeng.sdk:common:1.5.3' // PushSDK必须依赖utdid库,所以需要加入对应依赖 implementation 'com.umeng.sdk:utdid:1.1.5.3' // PushSDK implementation 'com.umeng.sdk:push:4.2.0' // 小米Push通道 implementation 'com.umeng.sdk:push-xiaomi:1.0.0' // 华为Push通道 implementation 'com.umeng.sdk:push-huawei:1.0.0' // 魅族Push通道 implementation 'com.umeng.sdk:push-meizu:1.0.0'
如果添加依赖同步编译后失败的话可以尝试在Project的Grande里jcenter()前面添加上mavenCentral()再同步编译看看。(如下图)
在自定义的Application的onCreate()方法里初始化友盟消息推送的SDK,如下片段代码所示:public class PushApplication extends Application { @Override public void onCreate() { super.onCreate(); /** * 初始化common库 * 参数1:上下文,不能为空 * 参数2:设备类型,UMConfigure.DEVICE_TYPE_PHONE为手机、UMConfigure.DEVICE_TYPE_BOX为盒子,默认为手机 * 参数3:Push推送业务的secret */ UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE, "这里填写应用申请到的Umeng Message Secret"); PushAgent mPushAgent = PushAgent.getInstance(this); // 注册推送服务,每次调用register方法都会回调该接口 mPushAgent.register(new IUmengRegisterCallback() { @Override public void onSuccess(String deviceToken) { // 注册成功会返回device token } @Override public void onFailure(String s, String s1) { } }); // 小米通道Push初始化,第一个参数为上下文,第二个参数为XIAOMI_ID ,第三个参数为XIAOMI_KEY MiPushRegistar.register(this, "这里填写小米的XIAOMI_ID", "这里填写小米的XIAOMI_KEY"); // 华为通道Push初始化,华为渠道无需传key HuaWeiRegister.register(this); // 魅族通道Push初始化,第一个参数为上下文,第二个参数为MEIZU_APPID ,第三个参数为MEIZU_APPKEY MeizuRegister.register(this, "这里填写魅族的MEIZU_APPID", "这里填写魅族的MEIZU_APPKEY"); } }
在Activity的onCreate()方法里初始化友盟消息推送的SDK,如下片段代码所示:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); PushAgent.getInstance(context).onAppStart(); } }
创建多渠道MipushTestActivity代码文件并继承UmengNotifyClickActivity进行测试小米、华为以及魅族国产机型离线的推送测试,如下片段代码所示:
public class MipushTestActivity extends UmengNotifyClickActivity { private static String TAG = MipushTestActivity.class.getName(); @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.activity_mipush); } @Override public void onMessage(Intent intent) { // 此方法必须调用,否则无法统计打开数 super.onMessage(intent); String body = intent.getStringExtra(AgooConstants.MESSAGE_BODY); Log.i(TAG, body); } }
创建魅族所需广播MeizuTestReceiver代码文件并继承UmengMeizuPushReceiver,如下片段代码所示:
public class MeizuTestReceiver extends UmengMeizuPushReceiver { }
在Android的清单文件里添加相应的配置信息及注册相应的application、meta-data、activity以及receiver信息。如下代码所示:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="应用的包名"> <application android:name=".PushApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <meta-data android:name="UMENG_APPKEY" android:value="这里添加在友盟后台申请到的应用APPKEY" /> <!-- Channel ID用来标识App的推广渠道,作为推送消息时给用户分组的一个维度。--> <meta-data android:name="UMENG_CHANNEL" android:value="Channel ID" /> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MipushTestActivity" android:exported="true" android:launchMode="singleTask" /> <!--魅族push应用定义消息receiver声明 --> <receiver android:name=".MeizuTestReceiver"> <intent-filter> <!-- 接收push消息 --> <action android:name="com.meizu.flyme.push.intent.MESSAGE" /> <!-- 接收register消息 --> <action android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK" /> <!-- 接收unregister消息--> <action android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK" /> <!-- 兼容低版本Flyme3推送服务配置 --> <action android:name="com.meizu.c2dm.intent.REGISTRATION" /> <action android:name="com.meizu.c2dm.intent.RECEIVE" /> <category android:name="这里添加应用的包名"> </category> </intent-filter> </receiver> </application> </manifest>
推送测试
在友盟+消息推送的后台添加推送测试的消息。(如下图所示)
手机端(本人的手机是小米手机,MIUI 10开发版,Android 8.1)通知栏接收到友盟后台推送的消息界面。(如下图所示)
———————— The end ————————
如果您觉得这篇博客写的比较好的话,赞赏一杯咖啡吧~~
- 在友盟+(友盟+官网)的后台注册账号并申请认证成为开发者,认证通过后选择“消息推送(U-Push)”业务后创建应用了(注意:应用的包名必须与AndroidStudio创建的包名一致,否则推送无法送达),创建应用后把应用的AppKey和Umeng Message Secret记录下来。(如下图)
-
Push-Notification:GCM推送通知
2021-05-22 08:31:34推送通知 GCM推送通知 GCM推送通知说明 1)在Google控制台“ ”中注册您的应用程序1.1)转到API,启用“适用于Android的Google Cloud Messaging” 1.2)转到凭据,单击“创建新密钥”。 然后点击“服务器密钥” 1.3... -
C#推送数据到安卓设备上
2018-06-22 15:30:36C#推送数据到安卓设备上C#推送数据到安卓设备上C#推送数据到安卓设备上