Android 中使用极光推送消息详细介绍(一)
来源:互联网 发布:java ee api下载 编辑:程序博客网 时间:2024/06/04 19:05
简介
在Android开发中,服务器有时候会向客户端推送一些用户可能感兴趣的消息,比如:淘宝,网易新闻,美团等都会向我们客户端推送消息.今天我就介绍一个第三方免费推送消息的服务:极光推送
官方资源
官方文档:
http://docs.jiguang.cn/client/android_sdk/
3 分钟快速集成 JPush Android SDK:
http://docs.jiguang.cn/guideline/android_3m/
Android SDK集成:
http://docs.jiguang.cn/guideline/android_guide/
具体使用
效果
官方提供了Demo ,在3分钟快速集成SDK文档里面,可以下载,如果不了解极光推送,可以吧官方的Demo下载下来运行一遍,就可以看见效果了
这边我已经下来过了,所以我就直接把效果图贴出来,方便大家观看
在极光推送的后台输入:JPushTest后,点击发送,客户端这便就会受到通知,这只是一个简单的效果
实现
好了,看完效果之后,我们就一步一步实现这个效果把
注册账号拿到AppKey
第一步就是要去官网注册账号,之后点击开发者服务选极光推送
第二步就是点击立即使用
第三步 创建应用
第四步 填写应用信息
第五步 拿到AppKey
新建一个工程
把刚才下载好的SDK解压出来
打开libs文件夹
其中有两部分,把jpush-android-2.1.7.jar这个jar包复制到我们工程的libs下面,之后在app/src/main文件夹下面新建一个文件夹,叫:jniLibs,把刚才除了jpush-android-2.1.7.jar这个以外所有的文件夹都放到这里
然后找到我们的manifest.xml 修改其中的内容(我已经把必须的都复制过来了,可以直接复制我的代码,当然也可以去照着文档进行复制,推荐去照着官方文档进行修改)
<?xml version="1.0" encoding="utf-8"?><manifest package="com.example.hfs.jpushexample" xmlns:android="http://schemas.android.com/apk/res/android"> <permission android:name="${applicationId}.permission.JPUSH_MESSAGE" android:protectionLevel="signature"/> <!-- Required 一些系统要求的权限,如访问网络等--> <uses-permission android:name="${applicationId}.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.WRITE_SETTINGS"/> <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.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <!-- Optional for location --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <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"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <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=".TestActivity"/> <!-- Required SDK核心功能--> <activity android:name="cn.jpush.android.ui.PushActivity" android:configChanges="orientation|keyboardHidden" android:exported="false" android:theme="@android:style/Theme.NoTitleBar"> <intent-filter> <action android:name="cn.jpush.android.ui.PushActivity"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="${applicationId}"/> </intent-filter> </activity> <!-- Required SDK核心功能--> <service android:name="cn.jpush.android.service.DownloadService" android:enabled="true" android:exported="false"> </service> <!-- Required SDK 核心功能--> <!-- 可配置android:process参数将PushService放在其他进程中 --> <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> <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 --> <!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 --> <service android:name="cn.jpush.android.service.DaemonService" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="cn.jpush.android.intent.DaemonService"/> <category android:name="${applicationId}"/> </intent-filter> </service> <!-- Required SDK核心功能--> <receiver android:name="cn.jpush.android.service.PushReceiver" android:enabled="true" android:exported="false"> <intent-filter android:priority="1000"> <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY"/> <!--Required 显示通知栏 --> <category android:name="${applicationId}"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.USER_PRESENT"/> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> <!-- Optional --> <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核心功能--> <receiver android:name="cn.jpush.android.service.AlarmReceiver" android:exported="false"/> <!-- User defined. For test only 用户自定义的广播接收器--> <receiver android:name=".MyReceiver" android:enabled="true" android:exported="false"> <intent-filter> <action android:name="cn.jpush.android.intent.REGISTRATION"/> <!--Required 用户注册SDK的intent--> <action android:name="cn.jpush.android.intent.UNREGISTRATION"/> <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED"/> <!--Required 用户接收SDK消息的intent--> <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED"/> <!--Required 用户接收SDK通知栏信息的intent--> <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED"/> <!--Required 用户打开自定义通知栏的intent--> <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK"/> <!--Optional 用户接受Rich Push Javascript 回调函数的intent--> <action android:name="cn.jpush.android.intent.CONNECTION"/><!-- 接收网络变化 连接/断开 since 1.6.3 --> <category android:name="${applicationId}"/> </intent-filter> </receiver> <!-- Required . Enable it you can get statistics data with channel --> <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/> <meta-data android:name="JPUSH_APPKEY" android:value="665d69121981502b7929625c"/> <!-- </>值来自开发者平台取得的AppKey--> </application></manifest>
好了,manifest.xml配置完之后,其实代码很简单,两句代码就可以实现推送功能了
在MainActivity的onCreate方法中加入这两句代码:
JPushInterface.setDebugMode(true);//如果时正式版就改成false JPushInterface.init(this);
这样,最基本的功能完成了,我们看下效果
修改通知标题
极光推送默认的通知标题是我们在创建应用时输入的应用名字,这有时不符合我们的要求,所以我们就要自己设置标题了,那么怎么设置呢?
极光推送已经为我们考虑到了这个问题了,我们只要在推送时输入我们要推送的标题即可,在立即发送上面有一个可选设置,打开就可以自定义标题了
这回我们修改下标题,再看下效果
发送消息
这个发送消息和上面的发送通知还是有区别的.发送通知可以直接展示在客户端上,但是发送消息客户端那边虽然接收到了,但是并不显示(不明觉厉???看下效果)
我在后台发送一个消息,我们观察下模拟器的变化
好吧,模拟器什么都没有….
那怎么知道我们发送成功呢?
我们可以看Log啊(哈哈),打开AndroidStudio看下log日志
07-30 12:33:00.917 19470-19470/com.example.hfs.jpushexample I/System.out: 收到了通知07-30 12:36:45.621 19470-19493/com.example.hfs.jpushexample D/JPush: [NetworkingClient] Received bytes - len:157, connection:-1205476664, pkg:com.example.hfs.jpushexample07-30 12:36:45.621 19470-19493/com.example.hfs.jpushexample D/JPush: [NetworkingClient] Action - receivedCommand - cmd:307-30 12:36:45.621 19470-19493/com.example.hfs.jpushexample D/JPush: [NetworkingClient] Network listening...07-30 12:36:45.621 19470-19470/com.example.hfs.jpushexample D/MyReceiver: onReceive - cn.jpush.android.intent.MESSAGE_RECEIVED07-30 12:36:45.621 19470-19470/com.example.hfs.jpushexample I/System.out: 收到了自定义消息。消息内容是:JpushMessage
这回看到了吧
那么问题来了,这个推送消息有什么用呢?
那就解释下把:
自定义消息是极光推送自己的概念。
自定义消息不是通知,所以不会被SDK展示到通知栏上。其内容完全由开发者自己定义。
自定义消息主要用于应用的内部业务逻辑。一条自定义消息推送过来,有可能没有任何界面显示。
发送消息或通知到特定的人群
有时我们并不是想把内容都发送给所有的用户,比如有的用户喜欢玩游戏,我们就把跟游戏有关的内容推送给他们即可,那么怎么实现呢?
在推送对象里面有个目标人群,在那里我们可以选择我们要推送的目标人群
Registration ID
这个是只要有客户端使用,极光推送就会生成一个Registration ID 因为这个时极光推送生成的,我们用起来不是很方便,所以基本上不用
别名
之后再看设备别名,这个就是你可以为客户端设置别名,这样在你推送的时候,你就推送到和你设置别名匹配的客户端上,使用直接调用setAlias()方法即可(比如用户登录完,你可以把用户名作为该用户的别名)
举例:
package com.example.hfs.jpushexample;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import java.util.HashSet;import java.util.Set;import cn.jpush.android.api.JPushInterface;import cn.jpush.android.api.TagAliasCallback;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); JPushInterface.setDebugMode(true); JPushInterface.init(this); JPushInterface.setAlias(this, //上下文对象 "test123456", //别名 new TagAliasCallback() {//回调接口,i=0表示成功,其它设置失败 @Override public void gotResult(int i, String s, Set<String> set) { Log.d("alias", "set alias result is" + i); } }); }}
好了,我们运行下程序,再看下效果
######标签(TAG)
这个和上面别名区别在于,这个可以发送好多个客户端,只要匹配这个标签即可
这里为了实现这个功能,我这边开两个模拟器,方便大家看下效果
方法是调用setTag()这个方法
说下这个方法把,这个方法的第二个参数是个set集合,为什么呢?因为每个人可能有好多个兴趣爱好,这样就可能有多个标签.这里我们假设第一个用户的TAG是sport和game;第二个用户的TAG是music和game
package com.example.hfs.jpushexample;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import java.util.HashSet;import java.util.Set;import cn.jpush.android.api.JPushInterface;import cn.jpush.android.api.TagAliasCallback;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); JPushInterface.setDebugMode(true); JPushInterface.init(this);// JPushInterface.setAlias(this, "test123456", new TagAliasCallback() {// @Override// public void gotResult(int i, String s, Set<String> set) {// Log.d("alias", "set alias result is" + i);// }// });// Set<String> sets = new HashSet<>(); sets.add("sport");//运行第二个模拟器上时把这个注掉 sets.add("game");// sets.add("music");//运行第二个模拟器上时把这个打开 JPushInterface.setTags(this, sets, new TagAliasCallback() { @Override public void gotResult(int i, String s, Set<String> set) { Log.d("alias", "set tag result is" + i); } }); }}
我们分别运行代码到两个模拟器上,之后我去后台推送一个通知,看下两个模拟器通知栏的变化
第一次推送标签选择sport,看下效果:
只有第二个模拟器收到了通知
第二次推送标签选择music,看下效果:
这有第一个模拟器收到了通知
第三次我们选择game,两个模拟器共有的标签,看下效果:
这回两个模拟器就都收到了通知
好了,这一章就讲到这里,后面会深入讲解自定义消息
- Android 中使用极光推送消息详细介绍(一)
- Android 中使用极光推送消息详细介绍
- Android 中使用极光推送消息详细介绍
- Android 使用极光推送消息详细介绍之自定义消息
- 极光推送详细介绍
- 学习使用Android极光消息推送
- Android消息推送,极光推送
- Android中实现消息推送(JPush)-极光推送
- Android 使用极光推送自定义消息推送效果
- Ionic项目中使用极光推送-android
- Ionic项目中使用极光推送-android
- Ionic项目中使用极光推送-android
- Android极光推送自定义消息
- Android 极光推送使用
- android消息推送---JPush(极光推送)
- php使用JPush极光推送ios android通知消息
- 极光推送的使用介绍
- 极光推送的使用介绍
- 范式的理解
- 链表例题
- pthread取消选项
- 51Nod-1182-完美字符串
- linux SSH 远程登陆环境搭建
- Android 中使用极光推送消息详细介绍(一)
- 树 的例题
- 关于在外部拿到RecyclerView的viewholder的几种方式
- android gridview布局添加多个title
- Your local changes to the following files would be overwritten by merge: git
- Mybatis中通过HaseMap封装参数作为查询条件
- Spring框架详解
- leetcode 55. Min Stack 如果有新的更小Min,直接在stack里加入一行Min.
- 第一次写微博,分享技术心得,日志