好久没有使用极光推送了,这次进入极光官网之后发现已经支持使用使用Jcenter自动集成了,使用起来非常方便,极光官网文档里面有具体使用的步骤,这里也写一下方便查阅

jcenter 自动集成步骤


说明

  • 确认android studio的 Project 根目录的主 gradle 中配置了jcenter支持。(新建project默认配置就支持)
buildscript {
    repositories {
        jcenter()
    }
    ......
}

allprojets {
    repositories {
        jcenter()
    }
}
  • 在 module 的 gradle 中添加依赖和AndroidManifest的替换变量。
android {
    ......
    defaultConfig {
        applicationId "com.xxx.xxx" //JPush上注册的包名.
        ......

        ndk {
            //选择要添加的对应cpu类型的.so库。 
            abiFilters 'armeabi', 'armeabi-v7a', 'armeabi-v8a' 
            // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
        }

        manifestPlaceholders = [
            JPUSH_PKGNAME : applicationId,
            JPUSH_APPKEY : "你的appkey", //JPush上注册的包名对应的appkey.
            JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
        ]
        ......
    }
    ......
}

dependencies {
    ......

    compile 'cn.jiguang:jpush:2.1.8'  // 此处以SDK 2.1.8版本为例

    ......
}

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

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

android.useDeprecatedNdk=true。

开发者要做的就是在module的gradle里添加一点含有极光后台注册的appkey的代码然后compile一个极光的sdk就可以了,使用起来是不是非常简单呢,省下了好多配置的东西,然后重写广播接收器MyRecerver最后在Mainfest里面不要忘记注册长驻型广播哦,还有如果需要使用极光的程序间互相唤醒的功能还要添加以下代码哦:


<!-- 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="com.********" />
    </intent-filter>

</service>


现在可能有人有疑问,什么是Jpush的互相拉起功能呢,具体是做什么的呢?

Jpush的互相拉起功能说的通俗一点就是:两个都使用了极光推送的应用如果A应用在后台运行着,此时服务器发送了一个推送给B应用,虽然B应用没有运行一样可以唤醒B应用受到通知(因为A和B都是使用的同一个服务也就是极光的服务)

android接收不到unipush的推送接收_极光推送收不到通知



那现在有一个好奇怪的问题,我使用安卓手机杀掉所有进程只有是收不到推送的,可是ios却能收到推送,产品说肯定是我做的不对,他们会拿ios跟你安卓进行比较说:为什么ios杀掉所有进程还能收到推送你安卓却不行呢,肯定是你的问题咯。。然后你就可以拿出下面的论据来打他脸,安卓和iso能一样吗?这有比较性吗?好论据给出:


android接收不到unipush的推送接收_android_02



然后通过下面的图来详细解释一下,iso有自己系统的apns通道,这apns通道其实就是极光后台推送到苹果服务器,苹果服务器来做推送,而安卓呢,是客户端直接跟极光服务器通过长连接来做推送,所以本身就存在差异,处理当然不同,下附ios和安卓的推送逻辑图

android接收不到unipush的推送接收_极光推送问题_03


android接收不到unipush的推送接收_推送_04