极光推送 messageidregistration id怎么获取

您目前的活力值不够下载该资源哦~~
怎么样快速获得活力值?
下载此资源将扣除活力值-20
(只在首次下载扣除活力值,之后可以免费下载)
DevStore用户登录
还没有DevStore帐号?
快捷登录:
为了尽快解决大伙儿的问题,请务必要找相对应的客服哦~
DevStore贯穿项目生命周期,解决你的所有问题
极光推送[客户端][服务器端]详解
DevStore编辑 夏萌
摘要:极光推送,使得开发者可以即时地向其应用程序的用户推送通知或者消息,与用户保持互动,从而有效地提高留存率,提升用户体验。平台提供整合了Android推送、iOS推送的统一推送服务。
废话不多说,先上客户端怎么集成极光推送的功能~
第一步:首先登录上帐号之后创建一个应用,记下里面应用标识(AppKey)、API MasterSecret(服务器端要用到这个)
第二步:SDK可去官网下载,按照这里面讲的一步一步来,这里很简单就不多说
第三步:上Demo~&
(这里讲一个小小功能,开机启动服务)
Android手机在开机、重启的时候系统会发送一个广播(android.intent.action.BOOT_COMPLETED),我们所要做的就是自定义一个BroadcastReceiver,使用标签去过滤这个广播,然后在onReceive()方法里面,干你该干的事,(我这里去启动了一个服务,初始化极光推送服务,然后可以实现开机不启动应用也可以顺利接收到推送)&
BootCompletedReceiver.java
package&com.example.b;
import&android.content.BroadcastR
import&android.content.C
import&android.content.I
import&android.util.L
public&class&BootCompletedReceiver&extends&BroadcastReceiver&{
public&void&onReceive(Context&context,&Intent&intent)&{
if&(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))&{
Log.d("yqb",&"检测到开机启动,去启动服务");
Intent&newIntent&=&new&Intent(context,&StartService.class);
context.startService(newIntent);
StartService.java
package&com.example.b;
import&android.app.S
import&android.content.I
import&android.os.IB
import&cn.jpush.android.api.JPushI
public&class&StartService&extends&Service&{
public&IBinder&onBind(Intent&intent)&{
//&TODO&Auto-generated&method&stub
public&void&onCreate()&{
//&TODO&Auto-generated&method&stub
super.onCreate();
JPushInterface.setDebugMode(true);&//&设置开启日志,发布时请关闭日志
JPushInterface.init(this);&//&初始化&JPush
JPushInterface.setLatestNotifactionNumber(getApplicationContext(),&10);//&保留多少条通知数
AndroidManifest.xml
要监听系统开机的那个服务需要一个权限:
&uses-permission&android:name="android.permission.RECEIVE_BOOT_COMPLETED"&&
&/uses-permission&
注册广播和服务:
&&&&&&&&&&!--&注册广播接收者&--&
&&&&&&&&&receiver&android:name="com.example.b.BootCompletedReceiver"&&
&&&&&&&&&&&&&intent-filter&
&&&&&&&&&&&&&&&&&!--&通过标签过滤&--&
&&&&&&&&&&&&&&&&&action&android:name="android.intent.action.BOOT_COMPLETED"&/&
&&&&&&&&&&&&&&&&&category&android:name="android.intent.category.LAUNCHER"&/&
&&&&&&&&&&&&&/intent-filter&
&&&&&&&&&/receiver&
&&&&&&&&&!--&注册Service&--&
&&&&&&&&&service&android:name="com.example.b.StartService"&&
&&&&&&&&&/service&
开始方法:
//&开机启动一个服务,去初始化极光推送
Intent&intent&=&new&Intent(MainActivity.this,&StartService.class);
startService(intent);
Toast.makeText(MainActivity.this,&"服务启动成功",&Toast.LENGTH_LONG).show();
注意:记得在AndroidManifest.xml文件里面注册广播和服务;
直接上代码:
package&com.example.b;
import&java.util.LinkedHashS
import&java.util.S
import&android.app.A
import&android.content.BroadcastR
import&android.content.C
import&android.content.I
import&android.content.IntentF
import&android.os.B
import&android.os.H
import&android.text.TextU
import&android.util.L
import&android.view.V
import&android.widget.B
import&android.widget.EditT
import&android.widget.TextV
import&android.widget.T
import&cn.jpush.android.api.JPushI
import&cn.jpush.android.api.TagAliasC
public&class&MainActivity&extends&Activity&{
private&final&String&TAG&=&"yqb";
private&TextView&mTextV
private&EditText&mEditT
private&Button&mB
public&static&boolean&isForeground&=&
private&static&final&int&MSG_SET_TAGS&=&1001;//设置tag
private&static&final&int&MSG_SET_ALIAS&=&1002;//设置设备别名
private&Handler&mHandler&=&new&Handler()&{
public&void&handleMessage(android.os.Message&msg)&{
super.handleMessage(msg);
switch&(msg.what)&{
case&MSG_SET_TAGS:
Log.d(TAG,&"Set&tags&in&handler.");
//&调用JPush&API设置Tag
JPushInterface.setAliasAndTags(getApplicationContext(),&null,
(Set)&msg.obj,&mTagsCallback);
case&MSG_SET_ALIAS:
Log.d(TAG,&"Set&alias&in&handler.");
//&调用JPush&API设置alias
JPushInterface.setAliasAndTags(getApplicationContext(),&(String)&msg.obj,
null,&mTagsCallback);
Log.i(TAG,&"Unhandled&msg&-&"&+&msg.what);
protected&void&onCreate(Bundle&savedInstanceState)&{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView&=&(TextView)&findViewById(R.id.textview1);
mEditText&=&(EditText)&findViewById(R.id.editText1);
mButton&=&(Button)&findViewById(R.id.button1);
//&与极光推送绑定tag
mButton.setOnClickListener(new&View.OnClickListener()&{
public&void&onClick(View&v)&{
//&TODO&Auto-generated&method&stub
String&tag&=&mEditText.getText().toString().trim();
//&检查&tag&的有效性
if&(TextUtils.isEmpty(tag))&{
Toast.makeText(MainActivity.this,&"tag不能为空",
Toast.LENGTH_SHORT).show();
//&","隔开的多个&转换成&Set
String[]&sArray&=&tag.split(",");
SettagSet&=&new&LinkedHashSet();
for&(String&sTagItme&:&sArray)&{
if&(!ExampleUtil.isValidTagAndAlias(sTagItme))&{
Toast.makeText(MainActivity.this,&"格式不对",
Toast.LENGTH_SHORT).show();
tagSet.add(sTagItme);
mHandler.sendMessage(mHandler.obtainMessage(MSG_SET_TAGS,
//&开机启动一个服务,去初始化极光推送
Intent&intent&=&new&Intent(MainActivity.this,&StartService.class);
startService(intent);
Toast.makeText(MainActivity.this,&"服务启动成功",&Toast.LENGTH_LONG).show();
registerMessageReceiver();&//&used&for&receive&msg
//&初始化&JPush。如果已经初始化,但没有登录成功,则执行重新登录。
private&void&init()&{
JPushInterface.init(getApplicationContext());
JPushInterface.setLatestNotifactionNumber(MainActivity.this,&10);//&保留多少条通知数
protected&void&onResume()&{
isForeground&=&
JPushInterface.onResume(this);
super.onResume();
protected&void&onPause()&{
isForeground&=&
JPushInterface.onPause(this);
super.onPause();
protected&void&onDestroy()&{
unregisterReceiver(mMessageReceiver);
super.onDestroy();
//&这个广播是通过MyReceiver来接收到服务端发送给我们的自定义消息(不是通知)然后在通过广播的形式发送过来,之后更新UI
//&这个实现功能是客户端不去向服务器请求,直接服务器推送消息下来,然后直接在界面展示(或者你可以写自己逻辑)
private&MessageReceiver&mMessageR
public&static&final&String&MESSAGE_RECEIVED_ACTION&=&"com.example.jpushdemo.MESSAGE_RECEIVED_ACTION";
public&static&final&String&KEY_TITLE&=&"title";
public&static&final&String&KEY_MESSAGE&=&"message";
public&static&final&String&KEY_EXTRAS&=&"extras";
public&void&registerMessageReceiver()&{
mMessageReceiver&=&new&MessageReceiver();
IntentFilter&filter&=&new&IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(MESSAGE_RECEIVED_ACTION);
registerReceiver(mMessageReceiver,&filter);
//&接收服务器推送过来过来自定义消息,
public&class&MessageReceiver&extends&BroadcastReceiver&{
public&void&onReceive(Context&context,&Intent&intent)&{
if&(MESSAGE_RECEIVED_ACTION.equals(intent.getAction()))&{
String&messge&=&intent.getStringExtra(KEY_MESSAGE);
String&extras&=&intent.getStringExtra(KEY_EXTRAS);
StringBuilder&showMsg&=&new&StringBuilder();
showMsg.append(KEY_MESSAGE&+&"&:&"&+&messge&+&"\n");
if&(!ExampleUtil.isEmpty(extras))&{
showMsg.append(KEY_EXTRAS&+&"&:&"&+&extras&+&"\n");
setCostomMsg(showMsg.toString());
//&更新界面UI逻辑
private&void&setCostomMsg(String&msg)&{
if&(null&!=&mTextView)&{
mTextView.setText(msg);
mTextView.setVisibility(android.view.View.VISIBLE);
//&通过TagAliasCallback的接口回调来判断tag是否与极光推送服务器绑定成功
private&final&TagAliasCallback&mTagsCallback&=&new&TagAliasCallback()&{
public&void&gotResult(int&code,&String&alias,&Settags)&{
switch&(code)&{
case&0://&绑定成功
logs&=&"Set&tag&and&alias&success";
Log.i(TAG,&logs);
case&6002://&绑定失败,60s之后再次绑定
logs&=&"Failed&to&set&alias&and&tags&due&to&timeout.&Try&again&after&60s.";
Log.i(TAG,&logs);
if&(ExampleUtil.isConnected(getApplicationContext()))&{
mHandler.sendMessageDelayed(
mHandler.obtainMessage(MSG_SET_TAGS,&tags),
1000&*&60);
Log.i(TAG,&"No&network");
logs&=&"Failed&with&errorCode&=&"&+&
Log.e(TAG,&logs);
//&用户绑定成功之后&toas通知
ExampleUtil.showToast(logs,&getApplicationContext());
下面是自定义的BroadcastReceiver(用来处理所有由服务器发送下来的通知,消息)
package&com.example.b;
import&org.json.JSONE
import&org.json.JSONO
import&android.content.BroadcastR
import&android.content.C
import&android.content.I
import&android.os.B
import&android.util.L
import&cn.jpush.android.api.JPushI
&*&自定义接收器
&*&如果不定义这个&Receiver,则:&1)&默认用户会打开主界面&2)&接收不到自定义消息
public&class&MyReceiver&extends&BroadcastReceiver&{
private&static&final&String&TAG&=&"JPush";
public&void&onReceive(Context&context,&Intent&intent)&{
Bundle&bundle&=&intent.getExtras();
Log.d(TAG,&"运行自定义的通知");
Log.d(TAG,&"[MyReceiver]&onReceive&-&"&+&intent.getAction()
+&",&extras:&"&+&"----&"&+&printBundle(bundle));
if&(JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction()))&{
String&regId&=&bundle
.getString(JPushInterface.EXTRA_REGISTRATION_ID);
Log.d(TAG,&"[MyReceiver]&接收Registration&Id&:&"&+&regId);
//&send&the&Registration&Id&to&your&server...
}&else&if&(JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent
.getAction()))&{
Log.d(TAG,
"[MyReceiver]&接收到推送下来的自定义消息:&"
+&bundle.getString(JPushInterface.EXTRA_MESSAGE));
processCustomMessage(context,&bundle);
}&else&if&(JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent
.getAction()))&{
Log.d(TAG,&"[MyReceiver]&接收到推送下来的通知");
int&notifactionId&=&bundle
.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
Log.d(TAG,&"[MyReceiver]&接收到推送下来的通知的ID:&"&+&notifactionId);
&&&&&&&&String&title&=&bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);
&&&&&&&&String&content&=&bundle.getString(JPushInterface.EXTRA_ALERT);
&&&&&&&&Log.d(TAG,&"Title&标题::&"&+&title&+&"&&"&+&"Content&:&内容:"&+&content);
}&else&if&(JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent
.getAction()))&{
Log.d(TAG,&"[MyReceiver]&用户点击打开了通知");
JPushInterface.reportNotificationOpened(context,
bundle.getString(JPushInterface.EXTRA_MSG_ID));
//&打开自定义的Activity
Intent&i&=&new&Intent(context,&TestActivity.class);
i.putExtras(bundle);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}&else&if&(JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent
.getAction()))&{
Log.d(TAG,
"[MyReceiver]&用户收到到RICH&PUSH&CALLBACK:&"
+&bundle.getString(JPushInterface.EXTRA_EXTRA));
//&在这里根据&JPushInterface.EXTRA_EXTRA&的内容处理代码,比如打开新的Activity,
//&打开一个网页等..
}&else&if&(JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent
.getAction()))&{
boolean&connected&=&intent.getBooleanExtra(
JPushInterface.EXTRA_CONNECTION_CHANGE,&false);
Log.e(TAG,&"[MyReceiver]"&+&intent.getAction()
+&"&connected&state&change&to&"&+&connected);
Log.d(TAG,&"[MyReceiver]&Unhandled&intent&-&"&+&intent.getAction());
//&打印所有的&intent&extra&数据
private&static&String&printBundle(Bundle&bundle)&{
StringBuilder&sb&=&new&StringBuilder();
for&(String&key&:&bundle.keySet())&{
if&(key.equals(JPushInterface.EXTRA_NOTIFICATION_ID))&{
sb.append("\nkey:"&+&key&+&",&value:"&+&bundle.getInt(key));
}&else&if&(key.equals(JPushInterface.EXTRA_CONNECTION_CHANGE))&{
sb.append("\nkey:"&+&key&+&",&value:"&+&bundle.getBoolean(key));
sb.append("\nkey:"&+&key&+&",&value:"&+&bundle.getString(key));
return&sb.toString();
//&send&msg&to&MainActivity
private&void&processCustomMessage(Context&context,&Bundle&bundle)&{
if&(MainActivity.isForeground)&{
String&message&=&bundle.getString(JPushInterface.EXTRA_MESSAGE);
String&extras&=&bundle.getString(JPushInterface.EXTRA_EXTRA);
Intent&msgIntent&=&new&Intent(MainActivity.MESSAGE_RECEIVED_ACTION);
msgIntent.putExtra(MainActivity.KEY_MESSAGE,&message);
if&(!ExampleUtil.isEmpty(extras))&{
JSONObject&extraJson&=&new&JSONObject(extras);
if&(null&!=&extraJson&&&&extraJson.length()&&&0)&{
msgIntent.putExtra(MainActivity.KEY_EXTRAS,&extras);
}&catch&(JSONException&e)&{
context.sendBroadcast(msgIntent);
以上就是客户端的代码,没多少挺简单,主要就是那个自定义的广播接收者来根据不同的参数来判断是什么推送通知;
下面来介绍服务器端代码,怎么使用极光推送服务器端SDK来搭建我们自己的后台推送:
首先需要下载依赖包:
gson-2.2.4.jar、jpush-java-libraryV2.jar
先上代码:
JPushClientExample.java
package&com.meritit.tuisong.
import&java.util.L
import&cn.jpush.api.DeviceE
import&cn.jpush.api.ErrorCodeE
import&cn.jpush.api.JPushC
import&cn.jpush.api.MessageR
import&cn.jpush.api.receive.ReceiveR
public&class&JPushClientExample&{
&*&App的Key&(在极光推送控制台创建应用页面上获取)
private&static&final&String&appKey&=&"fc0e14bb62bdf";&//&必填,每个应用都对应一个appKey
&*&App的MasterSecret&(在极光推送控制台创建应用页面上获取)
private&static&final&String&masterSecret&=&"38fb3cfa725bc";//&必填,每个应用都对应一个masterSecret
&*&保存离线的时长。秒为单位。最多支持10天(864000秒)。&0&表示该消息不保存离线。即:用户在线马上发出,当前不在线用户将不会收到此消息。
&*&此参数不设置则表示默认,默认为保存1天的离线消息(86400秒)。
private&static&final&long&timeToLive&=&60&*&60&*&24;
private&static&JPushClient&jpush&=&
&*&发送一个通知
public&static&final&int&NOTIFICATION&=&001;
&*&发送一个消息
public&static&final&int&MESSAGE&=&002;
&*&进行初始化操作
//&Example1:&初始化,默认发送给android和ios,同时设置离线消息存活时间
jpush&=&new&JPushClient(masterSecret,&appKey,&timeToLive);
//&Example2:&只发送给android
//&jpush&=&new&JPushClient(masterSecret,&appKey,&DeviceEnum.Android);
//&Example3:&只发送给IOS
//&jpush&=&new&JPushClient(masterSecret,&appKey,&DeviceEnum.IOS);
//&Example4:&只发送给android,同时设置离线消息存活时间
//&jpush&=&new&JPushClient(masterSecret,&appKey,&timeToLive,
//&DeviceEnum.Android);
//&Example5:&只发送给IOS,同时设置离线消息存活时间
//&jpush&=&new&JPushClient(masterSecret,&appKey,&timeToLive,
//&DeviceEnum.IOS);
&*&是否启用ssl安全连接,&可选&参数:启用true,&禁用false,默认为非ssl连接
jpush.setEnableSSL(true);
&*&对所有安装此应用的用户发送通知消息
&*&@param&msgTitle
&*&&&&&&&&&&&&通知标题
&*&@param&msgContent
&*&&&&&&&&&&&&通知内容
&*&@param&tag
&*&&&&&&&&&&&&标识是发送通知还是消息(通知是在客户端通知栏弹出通知、消息是直接在页面上更新UI)
&*&@return&true&成功&false&失败
public&static&boolean&sendAllUserPush(String&msgTitle,&String&msgContent,
int&tag)&{
//&在实际业务中,建议&sendNo&是一个你自己的业务可以处理的一个自增数字。
//&除非需要覆盖,请确保不要重复使用。详情请参考&API&文档相关说明。
int&sendNo&=&getRandomSendNo();
//&IOS设备扩展参数,&设置badge,设置声音
//&Mapextra&=&new&HashMap();
//&IOSExtra&iosExtra&=&new&IOSExtra(10,&"WindowsLogonSound.wav");
//&extra.put("ios",&iosExtra);
MessageResult&msgResult&=&
switch&(tag)&{
case&NOTIFICATION:
//&对指定标识(tag)用户发送通知
msgResult&=&jpush.sendNotificationWithAppKey(sendNo,&msgTitle,
msgContent);
case&MESSAGE:
//&对指定标识(tag)用户发送消息
msgResult&=&jpush.sendCustomMessageWithAppKey(sendNo,&msgTitle,
msgContent);
if&(null&!=&msgResult)&{
System.out.println("服务器返回数据:&"&+&msgResult.toString());
if&(msgResult.getErrcode()&==&ErrorCodeEnum.NOERROR.value())&{
System.out.println(String.format(
"发送成功,&sendNo=&%s,messageId=&%s",
msgResult.getSendno(),&msgResult.getMsg_id()));
System.out.println("发送失败,&错误代码="&+&msgResult.getErrcode()
+&",&错误消息="&+&msgResult.getErrmsg());
switch&(msgResult.getErrcode())&{
System.out.println("系统内部错误");
case&3001:
System.out.println("HTTP&Basic&authorization&失败");
case&3002:
System.out.println("msg_ids&参数不存在");
System.out.println("无法获取数据");
&*&对安装此应用通过绑定标识符(tag)来发送通知消息
&*&@param&msgTitle
&*&&&&&&&&&&&&通知标题
&*&@param&msgContent
&*&&&&&&&&&&&&通知内容
&*&@param&userId
&*&&&&&&&&&&&&绑定标识符(tag)
&*&@param&tag
&*&&&&&&&&&&&&标识是发送通知还是消息(通知是在客户端通知栏弹出通知、消息是直接在页面上更新UI)
&*&@return&true&成功&false&失败
public&static&boolean&sendTagUserPush(String&msgTitle,&String&msgContent,
String&userId,&int&tag)&{
//&在实际业务中,建议&sendNo&是一个你自己的业务可以处理的一个自增数字。
//&除非需要覆盖,请确保不要重复使用。详情请参考&API&文档相关说明。
int&sendNo&=&getRandomSendNo();
//&IOS设备扩展参数,&设置badge,设置声音
//&Mapextra&=&new&HashMap();
//&IOSExtra&iosExtra&=&new&IOSExtra(10,&"WindowsLogonSound.wav");
//&extra.put("ios",&iosExtra);
MessageResult&msgResult&=&
switch&(tag)&{
case&NOTIFICATION:
//&对指定标识(tag)用户发送通知
msgResult&=&jpush.sendNotificationWithTag(sendNo,&userId,&msgTitle,
msgContent);
case&MESSAGE:
//&对指定标识(tag)用户发送消息
msgResult&=&jpush.sendCustomMessageWithTag(sendNo,&userId,
msgTitle,&msgContent);
if&(null&!=&msgResult)&{
System.out.println("服务器返回数据:&"&+&msgResult.toString());
if&(msgResult.getErrcode()&==&ErrorCodeEnum.NOERROR.value())&{
System.out.println(String.format(
"发送成功,&sendNo=&%s,messageId=&%s",
msgResult.getSendno(),&msgResult.getMsg_id()));
System.out.println("发送失败,&错误代码="&+&msgResult.getErrcode()
+&",&错误消息="&+&msgResult.getErrmsg());
switch&(msgResult.getErrcode())&{
System.out.println("系统内部错误");
case&3001:
System.out.println("HTTP&Basic&authorization&失败");
case&3002:
System.out.println("msg_ids&参数不存在");
System.out.println("无法获取数据");
&*&保持&sendNo&的唯一性是有必要的&It&is&very&important&to&keep&sendNo&unique.
&*&@return&sendNo
public&static&int&getRandomSendNo()&{
final&int&MAX&=&Integer.MAX_VALUE;
final&int&MIN&=&(int)&MAX&/&2;
return&(int)&(MIN&+&Math.random()&*&(MAX&-&MIN));
&*&Received&API&以&msg_id&作为参数,去获取该&msg_id&的送达统计数据。&如果一次&API
&*&调用推送有很多对象(比如广播推送),则此&API&返回的统计数据会因为持续有客户端送达而持续增加。&每条推送消息的送达统计数据最多保留&10
&*&天。即一条消息推送发起&10&天后送达统计将被清除。
public&static&String&getMsgStatistics(String&msgId)&{
//&获取一条
ReceiveResult&receiveResult&=&jpush.getReceived(msgId);
if&(receiveResult&==&null)&{
return&("获取receive&数据失败!"&+&receiveResult);
//&gson&toJson&之后,NULL值的字段会被过滤掉
return&("received&result:"&+&receiveResult.toString());
&*&Received&API&以&msg_id作为参数,去获取该&msg_id&的送达统计数据。&如果一次
&*&API调用推送有很多对象(比如广播推送),最多支持100个msg_id,则此&API&返回的统计数据会因为持续有客户端送达而持续增加。
&*&每条推送消息的送达统计数据最多保留&10天。即一条消息推送发起&10&天后送达统计将被清除。
public&static&String&getMsgStatistics(String[]&msgIds)&{
//&获取多条
ListreceiveResults&=&jpush.getReceiveds(msgIds);
if&(receiveResults&==&null)&{
return&("获取receive&数据失败!");
return&("成功获取了:"&+&receiveResults);
注释写的很详细,大家直接看代码吧;
主要就是appKey和masterSecret一定要与我们在极光推送后台建立应用的保持一致,然后初始化JPushClient,我已经在里面封装好了一些公共方法,大家直接调用就可以了,
下面是我写的test.java测试类
package&com.meritit.tuisong.
public&class&test&{
&*&@param&args
public&static&void&main(String[]&args)&{
//&TODO&Auto-generated&method&stub
&if&(JPushClientExample.sendAllUserPush("测试标题",&"大好人",
&JPushClientExample.NOTIFICATION))&{
&System.err.println("----&发送成功");
if&(JPushClientExample.sendTagUserPush("测试标题",&"烂好人123",&"456",
JPushClientExample.NOTIFICATION))&{
System.err.println("----&发送成功");
//&msgId&:&&
//&String&msg&=&JPushClientExample.getMsgStatistics("");
//&System.out.println("统计发送的消息"+msg);
//&String[]&msgS&=&{&"",&"",&""&};
//&String&msg&=&JPushClientExample.getMsgStatistics(msgS);
//&System.out.println("统计发送的消息"&+&msg);
全部都测试通过;
有延迟的情况:(服务器的逻辑是,服务器通过外网去连接极光推送的服务器,给极光推送服务器发送消息,然后在通过极光推送服务器的后台来给我们手机发送推送和通知)
一、服务器的外网不给力。解决办法(换跟光钎)
二、手机的网速不给力。解决办法(连wifi,或者换4G!!)
已收藏 取消
夏萌 DevStore编辑
简介:姑娘有春天,也有夏天
可能喜欢的文章
开发者交流群:
运营交流群:
产品交流群:
深圳尺子科技有限公司
深圳市南山区蛇口网谷万海大厦C栋504
Copyright (C) 2015 DevStore. All Rights Reserved极光推送Jpush(v3)服务端PHP版本的api脚本类
关于极光推送的上一篇文章已经说明了,此处就不多说了。使用v3版本的原因是v2使用到2014年年底就停止了。
http://www.dodobook.net/php/777 欢迎移步浏览。
昨天才开始拿到极光推送的SDK下载文档。下载地址 /display/dev/Server-SDKs 看了半天也看出眉目。安装example的方法试了,各种报错。还需要vendor/autoload.php
composer的支持。
后来查找各种方法能实现了。但是感觉好庞大的一个包。且想封装成为一个类,几次尝试都失败。想想v2版本一个文件实现多好啊。
自己太笨了,网上找找到相关的文档。自己稍加改动,终于实现,一个类就在后端调用了。直接上代码:
//极光推送的类
//文档见:/display/dev/Push-API-v3
/***使用示例
$pushObj = new Jpush();
//组装需要的参数
//$receive = 'all';
//$receive = array('tag'=&array('2401','2588','9527'));
$receive = array('alias'=&array('93d78b*****')); //别名
$content = '这是一个测试的推送数据....测试....Hello World...';
$m_type = 'http';
$m_txt = '/';
$m_time = '600';
//离线保留时间
//调用推送,并处理
$result = $pushObj-&push($receive,$content,$m_type,$m_txt,$m_time);
if($result){
$res_arr = json_decode($result, true);
if(isset($res_arr['error'])){
//如果返回了error则证明失败
echo $res_arr['error']['message'];
//错误信息
echo $res_arr['error']['code'];
//处理成功的推送......
echo '推送成功.....';
//接口调用失败或无响应
echo '接口调用失败或无响应';
class Jpush{
private $app_key = 'd7fd***********c3642fc';
//待发送的应用程序(appKey),只能填一个。
private $master_secret = 'a04**********4a80377';
private $url = &/v3/push&;
//推送的地址
//若实例化的时候传入相应的值则按新的相应值进行
public function __construct($app_key=null, $master_secret=null,$url=null) {
if ($app_key) $this-&app_key = $app_
if ($master_secret) $this-&master_secret = $master_
if ($url) $this-&url = $
$receiver 接收者的信息
all 字符串 该产品下面的所有用户. 对app_key下的所有用户推送消息
tag(20个)Array标签组(并集): tag=&array('昆明','北京','曲靖','上海');
tag_and(20个)Array标签组(交集): tag_and=&array('广州','女');
alias(1000)Array别名(并集): alias=&array('93d78b*****','606df66ae10d1*****310');
registration_id(1000)注册ID设备标识(并集): registration_id=&array('20effc071de0b45c1a**********ffa467d800bed39e');
//$content 推送的内容。
//$m_type 推送附加字段的类型(可不填) http,tips,chat....
//$m_txt 推送附加字段的类型对应的内容(可不填) 可能是url,可能是一段文字。
//$m_time 保存离线时间的秒数默认为一天(可不传)单位为秒
public function push($receiver='all',$content='',$m_type='',$m_txt='',$m_time='86400'){
$base64=base64_encode(&$this-&app_key:$this-&master_secret&);
$header=array(&Authorization:Basic $base64&,&Content-Type:application/json&);
$data = array();
$data['platform'] = 'all';
//目标用户终端手机的平台类型android,ios,winphone
$data['audience'] = $
//目标用户
$data['notification'] = array(
//统一的模式--标准模式
&alert&=&$content,
//安卓自定义
&android&=&array(
&alert&=&$content,
&title&=&&&,
&builder_id&=&1,
&extras&=&array(&type&=&$m_type, &txt&=&$m_txt)
//ios的自定义
&ios&=&array(
// &alert&=&$content,
&badge&=&&1&,
&sound&=&&default&,
// &extras&=&array(&type&=&$m_type, &txt&=&$m_txt)
//苹果自定义---为了弹出值方便调测
$data['message'] = array(
&msg_content&=&$content,
&extras&=&array(&type&=&$m_type, &txt&=&$m_txt)
//附加选项
$data['options'] = array(
&sendno&=&time(),
&time_to_live&=&$m_time, //保存离线时间的秒数默认为一天
&apns_production&=&1,
//指定 APNS 通知发送环境:0开发环境,1生产环境。
$param = json_encode($data);
$res = $this-&push_curl($param,$header);
//得到返回值--成功已否后面判断
//未得到返回值--返回失败
//推送的Curl方法
public function push_curl($param=&&,$header=&&) {
if (empty($param)) { }
$postUrl = $this-&
$curlPost = $
$ch = curl_init();
//初始化curl
curl_setopt($ch, CURLOPT_URL,$postUrl);
//抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);
//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);
//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
// 增加 HTTP Header(头)里的字段
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
// 终止从服务端进行验证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$data = curl_exec($ch);
//运行curl
curl_close($ch);
真理惟一可靠的标准就是永远自相符合。 —— 欧文
备案/许可证编号为:滇ICP备号 CopyRight

我要回帖

更多关于 极光推送获取追加字段 的文章

 

随机推荐