Android集成极光推送

  • 复制 libs/jcore-android_v1.x.y.jar 到工程 libs/ 目录下
  • 复制 libs/jpush-android_v3.x.y.jar 到工程 libs/ 目录下
  • 复制 libs/(cpu-type)/libjcore1xy.so到你的工程中存放对应cpu类型的目录
  • 复制 res/ 中drawable-hdpi, layout, values文件夹中的资源文件到你的工程中 res/ 对应同名的目录下

配置AndroidManifest.xml文件清单

  • 添加相关权限

    <permission android:name="您的包名.permission.JPUSH_MESSAGE" android:protectionLevel="signature" />
    <uses-permission android:name="您的包名.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" />
    <!-- 用于开启 debug 版本的应用在6.0 系统上 层叠窗口权限 -->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <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" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    
  • 配置极光SDK需要的服务 广播接受者等

    <!--以下配置 JPush SDK 核心功能,added by tanglt start-->
    <!-- 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="您的包名" />
        </intent-filter>
    </service>
    
    <!--SDK核心功能-->
    <service
        android:name="cn.jpush.android.service.DownloadService"
        android:enabled="true"
        android:exported="false" />
    
    <!-- 可配置android:process参数将PushService放在其他进程中 -->
    <service
        android:name="cn.jpush.android.service.PushService"
        android:process=":push">
        <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>
    
    <!-- Rich push 核心功能 since 2.0.6-->
    <activity
        android:name="cn.jpush.android.ui.PopWinActivity"
        android:exported="false"
        android:theme="@style/MyDialogStyle"/>
    
    <!--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="您的包名" />
        </intent-filter>
    </activity>
    
    <!--SDK核心功能-->
    <receiver
        android:name="cn.jpush.android.service.PushReceiver"
        android:enabled="true">
        <intent-filter android:priority="1000">
            <!--Required  显示通知栏 -->
            <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
            <category android:name="您的包名" />
        </intent-filter>
        <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>
    
    <!--SDK核心功能-->
    <receiver
        android:name="cn.jpush.android.service.AlarmReceiver"
        android:exported="false" />
    
    <!--用户自定义的广播接收器-->
    <receiver
        android:name=".receiver.JPushCustomerReceiver"
        android:enabled="true"
        android:exported="false">
        <intent-filter>
            <!--Required  用户注册SDK的intent-->
            <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  用户打开自定义通知栏的intent-->
            <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
            <!-- 接收网络变化 连接/断开 since 1.6.3 -->
            <action android:name="cn.jpush.android.intent.CONNECTION" />
            <category android:name="您的包名" />
        </intent-filter>
    </receiver>
    
    <!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道-->
    <!-- 例如: -->
    <!-- 发到 Google Play 的APK可以设置为 google-play-->
    <!-- 发到其他市场的 APK 可以设置为 xxx-market -->
    <meta-data
        android:name="JPUSH_CHANNEL"
        android:value="developer-default" />
    <!--值来自开发者平台取得的AppKey-->
    <meta-data
        android:name="JPUSH_APPKEY"
        android:value="00000000" />
    <!-- 以上配置 JPush SDK 核心功能,added by tanglt end-->
    

代码混淆(proguard.pro文件)

-dontoptimize
-dontwarn cn.jpush.**
-keep class cn.jpush.** { *; }
-dontwarn cn.jiguang.**
-keep class cn.jiguang.** { *; }

注意:如果编译apk为release版本报错
Error:Execution failed for
task:iMAPP_C_ANDROID:transformClassesAndResourcesWithProguardForRelease’.
java.io.IOException: Please correct the above warnings first.
请在proguard.pro文件中添加 -ignorewarnings#忽略警告

初始化SDK

本应用程序Application 类
JPushInterface.setDebugMode(true);// 设置调试模式
JPushInterface.init(this);
JPush SDK 收到推送,通过广播的方式,转发给开发者App,这样开发者就可以灵活地进行处理
这个动作不是必须的。用户有需要才定义 Receiver 类来处理SDK过来的广播,如果不做这个动作,
即不写自定义 Receiver也不在 AndroidManifest.xml 里配置这个 Receiver则默认的行为是:
    接收到推送的自定义消息,则没有被处理
    可以正常收到通知,用户点击打开应用主界面
  • 清除通知

    推送通知到客户端时,由 JPush SDK 展现通知到通知栏上。
    此API提供清除通知的功能 
    
    包括:
    清除所有JPush展现的通知(不包括非JPush SDK展现的)
        public static void clearAllNotifications(Context context);
    清除指定某个通知
    public static void reportNotificationOpened(Context context, String msgId)
    
    context:应用的 ApplicationContext
    msgId:推送每一条消息和通知对应的唯一 ID(msgId 来源于发送消息和通知的Extra字段
    
  • 设置推送时间

    默认情况下用户在任何时间都允许推送。即任何时候有推送下来,客户端都会收到,并展示。(开发者可以调用
    此API来设置允许推送的时间)如果不在该时间段内收到消息,当前的行为是:推送到的通知会被扔掉
    
    public static void setPushTime(Context context, Set<Integer> weekDays, int startHour, int endHour)
    
    context:应用的ApplicationContext
    days:0表示星期天,1表示星期一,以此类推。 (7天制,Set集合里面的int范围为0到6)
    [Sdk1.2.9 – 新功能:set的值为null,则任何时间都可以收到消息和通知,set的size为0,则表示任何时间都收不到消息和通知]
    startHour:允许推送的开始时间 (24小时制:startHour的范围为0到23)
    endHour:允许推送的结束时间 (24小时制:endHour的范围为0到23)
    
    代码示例:此代码表示周一到周五、上午10点到晚上23点,都可以推送
    Set<Integer> days = new HashSet<Integer>();
    days.add(1);
    days.add(2);
    days.add(3);
    days.add(4);
    days.add(5);
    JPushInterface.setPushTime(getApplicationContext(), days, 10, 23);
    
  • 设置静音推送通知

    默认情况下用户在收到推送通知时,客户端可能会有震动,响铃等提示。但用户在睡觉、开会等时间点希望为
    "免打扰" 模式也是静音时段的概念 调用此 API 来设置静音时段。如果在该时间段内收到消息,则:不会有铃声和震动
    public static void setSilenceTime(Context context, int startHour, int startMinute, int endHour, int endMinute)
    
    Context context 应用的ApplicationContext
    int startHour 静音时段的开始时间 - 小时 (24小时制,范围:0~23 )
    int startMinute 静音时段的开始时间 - 分钟(范围:0~59 )
    int endHour 静音时段的结束时间 - 小时 (24小时制,范围:0~23 )
    int endMinute 静音时段的结束时间 - 分钟(范围:0~59 )
    
    示例代码:表示晚上10:30点到第二天早上8:30点为静音时段
    JPushInterface.setSilenceTime(getApplicationContext(), 22, 30, 8, 30)
    
  • 设置保留最近通知数

    通过极光推送,推送了很多通知到客户端时,如果用户不去处理,就会有很多保留在那里 新版本 SDK (v1.3.0)
    增加此功能,限制保留的通知条数。默认为保留最近 5 条通知 开发者可通过调用此 API 来定义为不同的数量
    (注意:仅对通知有效。所谓保留最近的,意思是,如果有新的通知到达,之前列表里最老的那条会被移除。
    例如,设置为保留最近 5 条通知。假设已经有 5 条显示在通知栏,当第 6 条到达时,第 1 条将会被移除)
    
    public static void setLatestNotificationNumber(Context context, int maxNum)
    
    本接口可以在 JPushInterface.init 之后任何地方调用。可以调用多次。SDK使用最后调用的数值
    
  • 消息的生命周期

    当一条消息从开发者AppServer(通过API调用)或者Portal上通过 JPush 推送后,不意味着这条消息马上就成功地推送到了用户设备上。
    实际上,这只是意味着,这条消息被极光推送服务器接收,进入准备推送状态。这条消息被接收后会怎么样,还要依赖于多个因素。
    理想情况下,当用户设备与服务器正在保持连接,也没有其他导致这条消息会被丢弃的因素存在,则用户马上会收到这条消息。
    接下来,看 time_to_live 字段的指定情况。如果为 0 ,表示该消息不保存离线,即如果用户当前不在线,则用户就会一直收不到该消息。
    time_to_live 大于 0 时会保留指定时长的离线消息时间。之后看 override_msg_id 是否被指定。如果新的一条消息,
    其 override_msg_id 与离线消息里已经存在的一条相同,则这条新的消息会覆盖老的消息
    
  • 离线消息

    JPush 当前默认支持 5 条离线消息。
    Android 平台上,用户上线时,会把离线消息推送下去。
    离线消息默认的保留时长是 1 天。
    API 2.0 提供一个 time_to_live 字段,允许调用推送消息时,设置保留的时长。以秒为单位。如果为 0 表示不保留离线消息,即只对在线的用户推送消息。最长为 10 天。
    消息覆盖
    JPush 基于 override_msg_id 来定义消息覆盖逻辑
    即对于同一个应用,如果新的一条消息其 override_msg_id 存在并与老的一条消息相同,则会被认为是要覆盖老的消息。
    这个情况对于是否保存离线消息有所不同:
    如果客户端已经收到,用户已经点击打开通知:则新的消息(override_msg_id 存在的消息)还是会显示在通知栏,用户看到的是有新的一条消息。
    如果客户端已经收到,但还在通知栏:则新的消息会在通知栏上覆盖老的消息。用户看到新的消息内容。
    如果客户端还未收到,消息还在离线消息里,则:新的消息会覆盖老的消息,用户不会收到老的消息
    
  • 消息删除

    一般来说,一条消息推送出来后,如果某用户在线,则他会立即收到,所以没有反悔(删除)的机会了。
    JPush 提供消息覆盖的机制,使得你可以有机会可以更新暂时离线的用户最后会收到的消息。
    JPush 暂未开放删除 “离线消息” 的机制与接口。如果特殊原因有需求,请发邮件到 support@jpush.cn 由极光推送支持人员来操作。
    推送顺序
    极光推送不保证:推送消息的顺序,客户端也以相同的顺序接收到。
    但是大多数时候用户收到的消息是按顺序推送的,即使保存离线消息也是有顺序的
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值