平时我们开发手机客户端总是少不了与服务器进行交流,那当我们服务器数据有更新时候,客户端是怎么知道的呢,我们以前一般用两种方法:
1,客户端每隔一段时间向服务器发请求,检测数据是否发生变化,当发生变化的时候我们客户端又该怎么样处理
2,在客户端采用广播机制,拦截服务器发来的短信,当服务器端有新的数据时,服务器向所有Android客户端发送短信,客户端基于广播机制将短信拦截并通过手机客户端应用呈现。该方案成本较高,需要向电信运营商申请短信发送端口。 以上两点存在的弊端还是比较多的,这个时候我就想到了Jpush极光推送。 废话不多说直接上例子(以阿众app为例)吧,以下是成功案例的截图:
1 首先我们去https://www.jpush.cn/products#product-sdk 极光官网上下载android/ios的sdk
1.1 下载完成后我们去极光官网注册开发者账号 http://jpush.cn
1.2 创建帐号进入极光推送后,首先显示的是创建应用的界面。填上你的应用程序的名称,以及 Android包名这二顶就可以了(包名必须与你需要推送的app包名一致)。
1.3 应用创建成功,即进入“应用详情”显示界面。 这个界面的应用标识也就是appKey是你要牢牢记住的
1.4 这个时候我们就可以来到需要推送的app里面了,首先来到我们的Manifest(清单文件)下将以下代码红色部分改为你的包名,蓝色部分改为你之前申请的appkey,其余字体颜色不同部分根据你的app做相应修改(meta-data标签下的value一定要是你申请推送应用的标实,我这里是:4131e53a1633b50406dc0953),把官网上下载的jpush-sdk-release1.6.3.jar导入到自己lib目录下,libjpush163.so导入到armeabi
<!-- Required -->
<permission android:name=<span style="color:#FF0000;">"Your Package</span>.permission.JPUSH_MESSAGE" android:protectionLevel="signature" />
<!-- Required -->
<uses-permission android:name="<span style="color:#FF0000;">You Package</span>.permission.JPUSH_MESSAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!--since 1.6.0 -->
<!-- Optional. Required for location feature -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
应用包名及appkey替换:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:name="<span style="color:#009900;"><span style="color:#000099;">Your Application</span></span>"> <!-- 这个是你app的Application -->
<!-- Required -->
<service
android:name="cn.jpush.android.service.PushService"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTER" />
<action android:name="cn.jpush.android.intent.REPORT" />
<action android:name="cn.jpush.android.intent.PushService" />
<action android:name="cn.jpush.android.intent.PUSH_TIME" />
</intent-filter>
</service>
<!-- Required -->
<receiver
android:name="cn.jpush.android.service.PushReceiver"
android:enabled="true" >
<intent-filter android:priority="1000"> <!--since 1.3.5 -->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" /> <!--since 1.3.5 -->
<category android:name="<span style="color:#FF0000;">Your Package</span>" /> <!--since 1.3.5 -->
</intent-filter> <!--since 1.3.5 -->
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
<!-- Required SDK核心功能-->
<activity
android:name="cn.jpush.android.ui.PushActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden" >
<intent-filter>
<action android:name="cn.jpush.android.ui.PushActivity" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="<span style="color:#FF0000;">Your Package</span>" />
</intent-filter>
</activity>
<!-- Required SDK核心功能-->
<service
android:name="cn.jpush.android.service.DownloadService"
android:enabled="true"
android:exported="false" >
</service>
<!-- Required SDK核心功能-->
<receiver android:name="cn.jpush.android.service.AlarmReceiver" />
<!-- Required. For publish channel feature -->
<!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。-->
<!-- 例如: -->
<!-- 发到 Google Play 的APK可以设置为 google-play; -->
<!-- 发到其他市场的 APK 可以设置为 xxx-market。 -->
<!-- 目前这个渠道统计功能的报表还未开放。-->
<meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/>
<!-- Required. AppKey copied from Portal -->
<meta-data android:name="JPUSH_APPKEY" android:value="<span style="color:#000099;"><span style="color:#000066;">Your AppKey</span></span>"/>
</application>
1.5 这个时候来到你app的启动页面,init 初始化SDK并添加如下代码:
public static boolean isForeground = false;
@Override
protected void onResume() {
//Log.d("test", "homeLanch-onResume:");
isForeground = true;
super.onResume();
System.out.println("++++++++++++++++++++++++++onresume()");
}
@Override
protected void onPause() {
isForeground = false;
System.out.println("++++++++++++++++++++++++++onPause()");
super.onPause();
}
private void init() {
// TODO Auto-generated method stub
JPushInterface.init(getApplicationContext());
}
这个时候我们完成的差不多了,把你的项目跑起来手机上或者模拟器上都行,但是要保证你的机器是网络可用的状态
1.6, 这个时候来到极光推送官网,登录您的账户,在应用中找到你要推送的app,点击“发送通知”,这个时候我们来到如下页面,写上你要发送的内容,点下面的发送,几秒之后你机器就会收到推送的消息。
如果没出错的话,手机能收到,先写到这吧,下班了。。。