直接写内容,不废话。喜欢看的看,不喜欢的别看,也别评论。

创建应用

进入极光控制台后,点击“创建应用”按钮,进入创建应用的界面。 填上你的应用程序的名称以及应用包名这二项就可以了, 最后点击最下方的 “创建我的应用”按钮,创建应用完毕。

jcenter 自动集成步骤

  • 确认android studio的 Project 根目录的主 gradle 中配置了jcenter支持(基本默认支持)
buildscript {repositories {jcenter()}......
}allprojets {repositories {jcenter()}
}
  • 在 module 的 gradle 中添加依赖

android {......defaultConfig {applicationId "com.xxx.xxx" //JPush上注册的包名.......ndk {//选择要添加的对应cpu类型的.so库。abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'}manifestPlaceholders = [JPUSH_PKGNAME : applicationId,JPUSH_APPKEY : "你的appkey", //JPush上注册的包名对应的appkey.JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.]......}......
}dependencies {......compile 'cn.jiguang.sdk:jpush:3.1.1'  // 此处以JPush 3.1.1 版本为例。compile 'cn.jiguang.sdk:jcore:1.1.9'  // 此处以JCore 1.1.9 版本为例。......
}

做到这边如果编译出现问题,需要这样做:

: 如果在添加以上 abiFilter 配置之后 android Studio 出现以下提示:

NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin

则在 Project 根目录的 gradle.properties 文件中添加:

    android.useDeprecatedNdk=true

: 使用 NDK r17 时,可能 Android Studio 会出现以下提示:

    A problem occurred starting process ‘command ‘/Users/xxx/Library/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/darwin-x86_64/bin/mips64el-linux-android-strip”系统找不到指定的文件

这是因为 NDK r17 之后不再支持 mips 平台,在 build.gradle 里增加如下配置可解决

    android {defaultConfig {.....}packagingOptions { doNotStrip '*/mips/*.so' doNotStrip '*/mips64/*.so' }}

说明:若没有 res/drawable-xxxx/jpush_notification_icon 这个资源默认使用应用图标作为通知 icon,在 5.0 以上系统将应用图标作为 statusbar icon 可能显示不正常,用户可定义没有阴影和渐变色的 icon 替换这个文件,文件名不要变。

AndroidManifest替换变量(在本地的 AndroidManifest 中定义同名的组件并配置想要的属性,然后用 xmlns:tools 来控制本地组件覆盖 jcenter 上的组件,一般替换receiver,记得修改category属性值)

  • AndroidManifest替换变量(在本地的 AndroidManifest 中定义同名的组件并配置想要的属性,然后用 xmlns:tools 来控制本地组件覆盖 jcenter 上的组件,一般替换receiver,记得修改category属性值)
    <application...><!-- 替换原生极光推送接收器 --><receiverandroid:name=".jpush.MyReceiver"android:enabled="true"android:exported="false"tools:node="replace"><intent-filter><action android:name="cn.jpush.android.intent.REGISTRATION" /> <!-- Required  用户注册SDK的intent --><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.CONNECTION" /> <!-- 接收网络变化 连接/断开 since 1.6.3 --><category android:name="com.xxx.xxx" /> <!--JPush上注册的包名 --> </intent-filter></receiver></application>

调试以及使用

  • 在Application的onCreate()初始化Sdk
    @Overridepublic void onCreate() {super.onCreate();JPushInterface.setDebugMode(true);JPushInterface.init(this);}
  • MyReceiver对推送进行处理
public class MyReceiver extends BroadcastReceiver {private static final String TAG = "JIGUANG";public static String regId;@Overridepublic void onReceive(Context context, Intent intent) {try {Bundle bundle = intent.getExtras();if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {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));// 自定义消息不是通知,默认不会被SDK展示到通知栏上,极光推送仅负责透传给SDK。其内容和展示形式完全由开发者自己定义。// 自定义消息主要用于应用的内部业务逻辑和特殊展示需求} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {Log.d(TAG, "[MyReceiver] 接收到推送下来的通知");String extra_json = bundle.getString(JPushInterface.EXTRA_EXTRA);if (!TextUtils.isEmpty(extra_json))Log.d(TAG, "[MyReceiver] 接收到推送下来的通知附加字段" + extra_json);// 可以利用附加字段来区别Notication,指定不同的动作,extra_json是个json字符串// 通知(Notification),指在手机的通知栏(状态栏)上会显示的一条通知信息} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {Log.d(TAG, "[MyReceiver] 用户点击打开了通知");// 在这里根据 JPushInterface.EXTRA_EXTRA(附加字段) 的内容处理代码,// 比如打开新的Activity, 打开一个网页等..} 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.w(TAG, "[MyReceiver]" + intent.getAction() + " connected state change to " + connected);} else {Log.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());}} catch (Exception e) {e.printStackTrace();}}
}
  • 利用别名精准推送
// 一般登录之后调用此方法设置别名
// sequence 用来标识一次操作的唯一性(退出登录时根据此参数删除别名)
// alias 设置有效的别名
// 有效的别名组成:字母(区分大小写)、数字、下划线、汉字、特殊字符@!#$&*+=.|。限制:alias 命名长度限制为 40 字节。
JPushInterface.setAlias(context,  int sequence, String alias);
// 退出登录删除别名
JPushInterface.deleteAlias(Context context,int sequence);
  • 自定义Notification

可通过JPushInterface.ACTION_MESSAGE_RECEIVED(收到自定义消息这个方法里去定义Notification,而不是用发送通知)

...
else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {Log.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));// 收到消息 显示通知processCustomMessage(context, bundle);
}
    private void processCustomMessage(Context context, Bundle bundle) {String channelID = "1";String channelName = "channel_name";// 跳转的ActivityIntent intent = new Intent(context, LoginActivity.class);intent.putExtras(bundle);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);// 获得系统推送的自定义消息String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);NotificationManager notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);//适配安卓8.0的消息渠道if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {NotificationChannel channel = new NotificationChannel(channelID, channelName, NotificationManager.IMPORTANCE_HIGH);notificationManager.createNotificationChannel(channel);}NotificationCompat.Builder notification =new NotificationCompat.Builder(context, channelID);notification.setAutoCancel(true).setContentText(message).setContentTitle("我是Title").setSmallIcon(R.drawable.logo120).setDefaults(Notification.DEFAULT_ALL).setContentIntent(pendingIntent);notificationManager.notify((int)(System.currentTimeMillis()/1000), notification.build());}

这里简单说说,有人说我的博客基本是复制别人的,但是不是这样的。我是参考了别人的文章,但是我都是在自己完成了功能后,自己发现了别人没有提到的问题,自己解决了。写博客时我不会一句话一句话去写,基本复制别人说的,但是我会加入自己遇到的问题,以及怎么解决的经历。所以我不是看了别人的文章就直接复制的,有些人别胡说。

Android 极广推送接入相关推荐

  1. Android百度云推送接入,附完整代码

    1.创建应用获取api_key 百度云推送:http://push.baidu.com/ SDK下载:http://push.baidu.com/sdk/push_client_sdk_for_and ...

  2. android 友盟服务端推送给客户端,Android 友盟推送 厂商通道 接入Notes

    image 前言 本文章也是就在接入过程中遇到的一些小问题做个记录,希望对遇到问题的开发者有些许帮助. 接入的SDK 版本为:Push SDK 6.1.0 官方文档 目前,友盟推送仅支持以下五家厂商的 ...

  3. Android 手机厂商推送服务调研

    由于谷歌服务在国内不能用,Android 的推送真是一大痛点,但也推动了国内一批做第三方服务的厂商.第三方推送做的比较好的有极光.个推.百度.友盟,经过比较之后,最后选择了极光推送.其实这些第三方推送 ...

  4. VIVO推送接入 OPPO推送接入 客户端+服务端

    老生常谈,推送接入已经不是什么难事,跟着文档走几小时就能搞定.不过我这里还是要记录一下,因为我在接入的时候还是有坑.希望这篇文章可以帮到你. VVIO客户端 厂商推送,无非就是收到推送拉起通知.所以在 ...

  5. 基于openfire+smack的Android、消息推送服务

    前言 Java领域的即时通信的解决方案可以考虑openfire+spark+smack.当然也有其他的选择. Openfire 是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使 ...

  6. Android端消息推送总结:实现原理、心跳保活、遇到的问题等

    前言 最近研究Android推送的实现, 研究了两天一夜, 有了一点收获, 写下来既为了分享, 也为了吐槽. 需要说明的是有些东西偏底层硬件和通信行业, 我对这些一窍不通, 只能说说自己的理解. 为什 ...

  7. 腾讯IM-uniapp离线推送接入-以华为推送为例

    0x01 集成IM的离线推送插件 购买并下载插件 在工程下创建nativeplugins文件夹,将下载的插件放此目录中.目录结构如下 ├─nativeplugins │ └─TencentCloud- ...

  8. Android平台RTMP推送端实现外部数据对接推送和录像

    背景 好多开发者在做Android平台RTMP推送对接的同时,除了编码前的数据外,还有些外部编码数据推送诉求,他们希望外部的编码音视频数据不止可以实现RTMP推送,还可以同时在推送端实时录制下来,本文 ...

  9. android 通知 广告,解决三星/小米等Android手机通知栏推送广告的问题

    三星和小米都是使用安卓系统的手机,有时候突然在手机通知栏弹出很多的广告,而且广告是不定时的弹出,你把消息清理掉之后,过段时间还是会弹出广告. 而且下载的都是一些乱七八糟的东西,对手机没有什么用处,想完 ...

最新文章

  1. mybatis的#和$的差别
  2. 1个多月就能看到效果的减肥大法 - 生活至上,美容至尚!
  3. 五、【线性表】线性表的链式表示和实现
  4. 升级到VS.net 2008 sp1并安装卡巴斯基的兄弟们小心了
  5. alpha冲刺day8
  6. Ubuntu Docker 安装
  7. MySQL select
  8. 薄板开孔建模计算的ansys命令流
  9. Spring框架学习记录二:装配Bean
  10. 手把手教您用虹科MatrikonOPC UA数据平台掌握您所有的UA服务器
  11. 如何利用微信活码快速裂变100个微信群?
  12. jquery获取元素下面的所有指定元素
  13. 个人作业Week3-案例分析
  14. python 爬取淘宝第一弹(淘宝登录)
  15. Grafana 的安装和配置
  16. 计算机网络路由器配置实验,路由器配置实验报告-计算机网络(免费)_IT /计算机_数据...
  17. 深度学习:算法到实战
  18. 好长,越往下翻越喜欢!
  19. TP4056锂电池充电IC
  20. 使用JS距离实现LDA文档相似度计算

热门文章

  1. SQL(Oracle)日常使用与不常使用函数的汇总
  2. 云后台Bmob的一些资料
  3. Qt坐标系以及自定义可移动控件
  4. HTML5 的知识分享(二):HTML5 的常用标签
  5. 搭建TXManager分布式事务协调者
  6. 6. H.264/AVC编码器原理
  7. 【GIT 基础篇二】创建版本库与提交
  8. centos7安装python-pip
  9. redis文档翻译_key设置过期时间
  10. 夺命雷公狗---PHP开发APP接口---1(手动编写json)