2分钟搞定极光推送

【快速搞定】2分钟搞定极光推送(极光推送Android端集成)

一、前言

2分钟只是一个虚数哈,不过只要你速度快,两分钟还真是能搞定的哦。在2.1.8版本以前,极光的配置还是非常麻烦的,需要在清单文件(AndroidManifest.xml)里面各种配置,篇幅非常大。可能极光的开发者也意识到了这点,所以在2.1.8之后就加入了gradle的配置,简化了非常多的配置步骤。本文旨在通过简洁的步骤来快速完成极光的配置。(登录、注册和创建应用小白都会,这里就不贴教程了,直接上配置)

二、SDK配置

第一步、Gradle配置(Module的build.gradle)

首先,确保你的 ** minSdkVersion ** 在15及以上版本,然后defaultConfig中加入下面的代码(AppKey需要换成你的应用哦):

ndk {
     //选择要添加的对应cpu类型的.so库(不需要的删除即可)。 
    abiFilters 'armeabi', 'armeabi-v7a', 'armeabi-v8a', 'x86', 'x86_64', 'mips', 'mips64' 
} 
manifestPlaceholders = [ 
    JPUSH_PKGNAME: applicationId, 
    JPUSH_APPKEY : "6c86501ae0e99b5cfd30b1d0", //JPush上注册的包名对应的appkey(*换成你的*) 
    JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
 ]

来张图更直观一点:

1.png
第二步、添加依赖

还是Module的build.gradle文件中哦

compile 'cn.jiguang.sdk:jpush:3.0.1'  // 此处以JPush 3.0.1 版本为例。
compile 'cn.jiguang.sdk:jcore:1.1.0'  // 此处以JCore 1.1.0 版本为例。

至此,只需同步一下即可自动配置sdk

2.png

如果报错的话,需要在Project的gradle.properties文件中添加下面的代码:

android.useDeprecatedNdk=true
第三步、混淆

在ProGuard文件(即proguard-rules.pro)中加入混淆代码:
-dontoptimize-dontpreverify-dontwarn cn.jpush.**-keep class cn.jpush.** { *; }

第四步、初始化

新建一个MyApplication类(继承至Application),并在清单文件(AndroidManifest.xml)的application节点添加name属性关联MyApplication。在MyApplication的onCreate方法中加入初始化的代码:

public class MyApplication extends Application { 
    @Override
    public void onCreate() { 
        super.onCreate(); //初始化sdk
        JPushInterface.setDebugMode(true);//正式版的时候设置false,关闭调试 
        JPushInterface.init(this); //建议添加tag标签,发送消息的之后就可以指定tag标签来发送了
        Set<String> set = new HashSet<>();
        set.add("andfixdemo");//名字任意,可多添加几个
        JPushInterface.setTags(this, set, null);//设置标签 
    }
}
第五步、创建自定义广播接收器

极光推送是需要自定义一个广播器来接收推送消息的。下面是官方demo的MyReceiver。(限于篇幅,省略了部分代码,需要的可以到最后给出的github中或官方demo下载)

自定义接收器:如果不定义这个 Receiver,则:

  1. 默认用户会打开主界面
  2. 接收不到自定义消息
public class MyReceiver extends BroadcastReceiver { 
    private static final String TAG = "JPush"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
        Bundle bundle = intent.getExtras(); 
        Log.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle)); 
        if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) { 
            String 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)); 
            processCustomMessage(context, bundle);
        } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) { 
            Log.d(TAG, "[MyReceiver] 接收到推送下来的通知"); 
            int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
            Log.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId); 
        } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) { 
           Log.d(TAG, "[MyReceiver] 用户点击打开了通知");
           //打开自定义的Activity
          // Intent i = new Intent(context, TestActivity.class);
          // i.putExtras(bundle);
          //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         // i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );
        // context.startActivity(i); 
        } 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()); 
        } 
} 
// 打印所有的 intent extra 数据 
private static String printBundle(Bundle bundle) { ...//省略了 } 
//send msg to MainActivity 
private void processCustomMessage(Context context, Bundle bundle) { ...//省略了 }
}

还没完,因为广播接收器是android四大组件之一,所以需要在清单文件中加入下面的配置哦。

<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.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="com.hdl.jpushdemo" /> 
        </intent-filter> 
</receiver>
第六步、测试

1、 进入极光推送管理后台,选择当前应用,推送,发送通知,填下推送的内容,选择目标人群,点击发送即可。

3.png

2、 手机端

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

推荐阅读更多精彩内容