赞
踩
小米推送(MiPush)是小米公司为开发者提供的消息推送服务,通过在云端和客户端之间建立一条稳定、可靠的长连接,为开发者提供向客户端应用推送实时消息的服务,帮助开发者有效地拉动用户活跃。
使用场景:现在我们在做一个购物App的产品有用户端和商户端,用户端购买了一件商品并且完成了在线支付,这个时候服务器会收到这个订单,也应该在这个时候第一时间通知到这件商品的商户(商户端)有人购买了店里的东西。我们使用小米推送,即这个过程为:
用户 -> 下单并付款 -> 服务器收到订单 -> 通知到推送服务器(小米推送) -> 推送到商户 -> 商户处理此订单
没有注册的首先可以去小米开发者平台注册,注册申请什么的这里就不赘述了,网上教程也很多,当你注册好了账号,拿到AppID,AppKey,AppSecret之后下载好Android SDK&PHP SDK的时候我们就可以正式进入今天的话题了。
需要注意修改的地方:
Android SDK:(由于目标是商户端收到推送消息,即只需要配置商户端、而不需要配置用户端)
①使用你自己的 appid,需要修改几个地方:DemoApplication.java 中的 APP_ID,APP_KEY,和权限 permission.MIPUSH_RECEIVE 的前缀为你的 packagename。
②在application标签下将name属性和DemoApplication关联起来
<application
android:name="com.你的应用包名.DemoApplication"
③DemoMessageReceiver在Application中注册的时候注意包名不要搞错了
<receiver
android:name="com.你的应用包名.DemoMessageReceiver"
android:exported="true">
相信这都东西大家都不成问题
PHP SDK:
①android_example.php中需要修改的
$secret = '你的AppSecret';
$package = 'com.你的包名';
准备工作完成后,可以使用小米的推送工具测试一下是否都已经配置好了。确认配置好了之后,我们需要在用户端购买一件东西了,这里的请求使用的是OkHttp的开源框架
- OkHttpUtils.post().url("http://你的一个处理下单付款的程序.php")
- .addParams("subject", subject)
- .addParams("oid", orderId)
- <span style="white-space:pre"> </span>.addParams("bid", bid)
- .build()
- .execute(new Callback<String>() {
- @Override
- public void onError(Call arg0, Exception arg1) {
- }
- @Override
- public void onResponse(String arg0) {
- Message msg = Message.obtain();
- msg.what = 100;
- msg.obj= arg0;
- mHandler.sendMessage(msg);
- }
- @Override
- public String parseNetworkResponse(Response arg0) throws Exception {
- return arg0.body().string();
- }
- });
服务端的处理下单付款的程序
- <?php
- header('content-type:text/html;charset=utf-8');
- use xmpush\Builder;
- use xmpush\HttpBase;
- use xmpush\Sender;
- use xmpush\Constants;
- use xmpush\Stats;
- use xmpush\Tracer;
- use xmpush\Feedback;
- use xmpush\DevTools;
- use xmpush\Subscription;
- use xmpush\TargetedMessage;
- include_once(dirname(__FILE__).'/autoload.php');
-
-
- $secret = '你的AppSecret';
- $package = 'com.你的包名';
- $bid = $_REQUEST['bid'];
-
- // 常量设置必须在new Sender()方法之前调用
- Constants::setPackage($package);
- Constants::setSecret($secret);
-
- $title = '你有新的订单';
- $desc = '请尽快处理你的未处理订单';
- $payload = '{"test":1,"ok":"It\'s a string"}';
-
- $sender = new Sender();
-
- $res = 验证订单的方法();
- if($res and $succes == '"true"'){
- //需要做的事情更新销量、更新支付状态、支付时间
- try {
- // 开启事务
-
- // 提交事务
- $PdoMySQL::$link->commit();
- $reqCode = '0';
- $reqMessage = '订单提交成功';
- } catch (PDOException $e) {
- // 回滚事务
- $PdoMySQL::$link->rollBack();
- $reqCode = '-24';
- $reqMessage = $e->getMessage();
- echo $e->getMessage();
- return false;
- }
- //推送消息给商家
- $message = new Builder();
- $message->title($title);
- $message->description($desc);
- $message->passThrough(0);
- $message->payload($payload); // 对于预定义点击行为,payload会通过点击进入的界面的intent中的extra字段获取,而不会调用到onReceiveMessage方法。
- $message->extra(Builder::notifyEffect, 1); // 此处设置预定义点击行为,1为打开app
- $message->extra(Builder::notifyForeground,1);
- $message->notifyId(0);
- $message->build();
- $targetMessage2 = new TargetedMessage();
- $targetMessage2->setTarget($bid, TargetedMessage::TARGET_TYPE_ALIAS);
- $targetMessage2->setMessage($message);
- $targetMessageList = array($targetMessage2);
- $sender->multiSend($targetMessageList,TargetedMessage::TARGET_TYPE_ALIAS);
-
- echo 'succes';
- }else{
- echo 'fail';
- }
- ?>
- DemoApplication.setMainActivity(this);
- String bid = this.getSharedPreferences("data",MODE_PRIVATE).getString("BusinessId", "-1");
- //设置别名
- MiPushClient.setAlias(MainActivity.this, bid, null);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。