无标题文章

极光推送(JPush Android SDK)

Author:HarleyLast update:2018/5/17

1.接入前准备工作

1.1登录进入管理控制台,创建应用程序,得到Appkey

1.2设置应用包名

2.SDk自动集成步骤

2.1在 module 的 gradle 中添加依赖和AndroidManifest的替换变量。

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

2.2AndroidManifest 示例

package添加您的应用包名

package="您应用的包名">

添加权限:



3添加代码混淆规则

在应用工程的proguard-project.txt里添加以下代码混淆规则:

-dontoptimize

-dontpreverify

-dontwarn cn.jpush.**

-keep class cn.jpush.** { *; }

-keep class * extends cn.jpush.android.helpers.JPushMessageReceiver    { *; }

-dontwarn cn.jiguang.**

-keep class cn.jiguang.** { *; }

4添加代码

4.1init初始化SDK

示例代码:

public class ExampleApplication extends Application {

@Override

public void onCreate() {

   super.onCreate();

   JPushInterface.setDebugMode(true);

   JPushInterface.init(this);

}}

4.2接收推送消息Receiver

public class MyReceiver extends BroadcastReceiver {

private static final String TAG = "MyReceiver";

private NotificationManager nm;

@Override

public void onReceive(Context context, Intent intent) {

   if (null == nm) {

       nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

   }


   Bundle bundle = intent.getExtras();

   Logger.d(TAG, "onReceive - " + intent.getAction() + ", extras: " + AndroidUtil.printBundle(bundle));


   if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {

       Logger.d(TAG, "JPush用户注册成功");


   } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {

       Logger.d(TAG, "接受到推送下来的自定义消息");


   } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {

       Logger.d(TAG, "接受到推送下来的通知");


       receivingNotification(context,bundle);

   } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {

       Logger.d(TAG, "用户点击打开了通知");


      openNotification(context,bundle);

   } else {

       Logger.d(TAG, "Unhandled intent - " + intent.getAction());

   }

}

}

4.3Intent 参数说明

private void processCustomMessage(Context context, Bundle bundle) {

    String title = bundle.getString(JPushInterface.EXTRA_TITLE);//推送下来的通知的标题。

    String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);//推送下来的通知内容。

    if (StringUtils.isEmpty(title)) {

        Logger.w(TAG, "Unexpected: empty title (friend). Give up");

        return;

    }

}

JPushInterface.EXTRA_NOTIFICATION_TITLE

保存服务器推送下来的通知的标题。

JPushInterface.EXTRA_ALERT

保存服务器推送下来的通知内容。

JPushInterface.EXTRA_EXTRA

保存服务器推送下来的附加字段。这是个 JSON 字符串。

对应 API 消息内容的 extras 字段。

JPushInterface.EXTRA_NOTIFICATION_ID

通知栏的Notification ID,可以用于清除Notification

JPushInterface.EXTRA_MSG_ID

唯一标识调整消息的 ID, 可用于上报统计等。

5.0通知 vs 自定义消息(两者的区别)

1.通知(Notification),指在手机的通知栏(状态栏)上会显示的一条通知信息。

通知主要用于提示用户。一条通知,简单的填写纯文本的通知内容即可。

2.自定义消息不是通知,默认不会被SDK展示到通知栏上,极光推送仅负责透传给SDK。其内容和展示形式完全由开发者自己定义。

自定义消息主要用于应用的内部业务逻辑和特殊展示需求。

6.0使用别名

为安装了应用程序的用户,取个别名来标识。以后给该用户 Push 消息时,就可以用此别名来指定。

调用此 API 来设置别名:

public static void setAlias(Context context, int sequence, String alias);

调用此 API 来查询别名:

public static void getAlias(Context context,int sequence);

调用此 API 来删除别名:

public static void deleteAlias(Context context,int sequence);

温馨提示:设置标签别名请注意处理call back结果。只有设置成功, 才可以向目标推送。否则服务器 API 会返回1011错误。

7.0使用标签

用于给某一群人推送消息。

标签类似于博客里为文章打上 tag ,即为某资源分类。

调用此 API 来新增标签:

public static void addTags(Context context, int sequence,Set tags);

调用此 API 来删除指定标签:

public static void deleteTags(Context context, int sequence,Set tags);

调用此 API 来清除所有标签:

public static void cleanTags(Context context, int sequence);

调用此 API 来查询所有标签:

public static void getAllTags(Context context, int sequence);

调用此 API 来查询指定tag与当前用户绑定的状态:

public static void checkTagBindState(Context context,int sequence,String tag);

8.0停止与恢复推送服务 API:

停止推送服务:

public static void stopPush(Context context);

恢复推送服务:

public static void resumePush(Context context);

注:用户登录成功时,设置推送别名和调用恢复推送服务API。退出时,设置别名为空和停止推送服务

示例代码:

JPushInterface.resumePush(mContext);//调用恢复推送服务API

JPushInterface.setAlias(mContext, userBean.getId(), new TagAliasCallback() {// 设置推送别名

@Override

public void gotResult(int i, String s, Set set) {


    }

});

9.0自定义通知栏样式设计:

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);

        //通知栏显示内容

        builder.setTicker(TextUtils.isEmpty(title) ? "自定义极光推送" : title);

        //通知消息下拉是显示的文本内容

        builder.setContentText(TextUtils.isEmpty(content) ? title : content);

        //通知栏消息下拉时显示的标题

        builder.setContentTitle(TextUtils.isEmpty(title) ? "自定义极光推送" : title);

        //接收到通知时,按手机的默认设置进行处理,声音,震动,灯

        builder.setDefaults(Notification.DEFAULT_ALL);

        //通知栏显示图标

        builder.setSmallIcon(R.mipmap.ic_launcher);

        builder.setLargeIcon(BitmapUtil.decodeBitmap(context, R.mipmap.ic_launcher, 72, 72));//todo  内存溢出

        builder.setContentIntent(pendingIntent);

        Notification notification = builder.build();

        //点击跳转后消失

        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        int notifyId = (int) System.currentTimeMillis();

        NotificationManager manager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);

        manager.notify(notifyId, notification);

9.0  三分钟Demo

https://docs.jiguang.cn/jpush/client/Android/android_3m/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容