android 接入极光推送(极光通道和厂商通道)

1.在极光平台注册开发者账号
2.创建应用 头像 -》 服务中心-》开发者平台-》概览-》创建应用


1626862508(1).png

3.maven自动集成
(1)项目build.gradle配置mavenCentral

          buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    ......
}

allprojects {
    repositories {
        jcenter()
        mavenCentral()
    }
}

(2)在module build.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 {
    ......

    implementation 'cn.jiguang.sdk:jpush:4.2.4'  // 此处以JPush 4.2.4 版本为例。
    implementation 'cn.jiguang.sdk:jcore:2.9.0'  // 此处以JCore 2.9.0 版本为例。

    }

appkey在极光的企业应用运营平台的 应用设置 查看


1626862941(1).jpg

(3)如果你使用的 JCore 是 2.0.0 及以上的版本,需要额外在 Androidmanifest 中配置一个Service,以在更多手机平台上获得更稳定的支持,示例如下。(JCore1.x版本不需要)

  <application>
      ....
 <!-- Since JCore2.0.0 Required SDK核心功能-->
         <!-- 可配置android:process参数将Service放在其他进程中;android:enabled属性不能是false -->
         <!-- 这个是自定义Service,要继承极光JCommonService,可以在更多手机平台上使得推送通道保持的更稳定 -->
         <service android:name="xx.xx.XService"
                 android:enabled="true"
                 android:exported="false"
                 android:process=":pushcore">
                 <intent-filter>
                     <action android:name="cn.jiguang.user.service.action" />
                 </intent-filter>
         </service>    
    ....
</application>

(4)从JPush3.0.7开始,需要配置继承JPushMessageReceiver的广播

  <application>
      ....
<!-- Required since 3.0.7 -->
         <!-- 新的 tag/alias 接口结果返回需要开发者配置一个自定的广播 -->
         <!-- 3.3.0开始所有事件将通过该类回调 -->
         <!-- 该广播需要继承 JPush 提供的 JPushMessageReceiver 类, 并如下新增一个 Intent-Filter -->
         <receiver
               android:name="自定义 Receiver"
               android:enabled="true" 
               android:exported="false" >
               <intent-filter>
                    <action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
                    <category android:name="您应用的包名" />
               </intent-filter>
         </receiver>  
    ....
</application>

4.开始测试
创建一个推送通知发送


1626863319(1).jpg

如果手机接收到了发送的通知 说明集成极光sdk成功,但是此时的推送通知只能通过极光通道送达

5.集成厂商通道
为什么?
在国内 Android 生态中,推送通道都是由终端与云端之间的长链接来维持,严重依赖于应用进程的存活状态。如今一些手机厂家会在自家 rom 中做系统级别的推送通道,再由系统分发给各个 app,以此提高在自家 rom 上的推送送达率。
(1)华为通道
<1>在华为平台创建应用https://developer.huawei.com/cn/
管理中心->AppGallery Connect->我的项目->创建项目
创建完成之后 在项目设置中可以看到我们需要的配置信息
创建的过程中注意,华为这边的包名要与极光后台的保持一致 ,填写必要信息即可,不用上架,填写完保存就行。

1626918379(1).jpg

注意:SHA256证书指纹是必填的,指纹证书是在终端采用keytool -list -v -keystore keystorefileName
windos+r 输入cmd打开黑窗口
定位到你keytool目录下
例如
1626918891(1).jpg

输入keytool -list -v -keystore jks文件地址 命令
例如
1626919092(1).jpg

输入密码后得到jks文件信息
1626919230(1).jpg

<3>下载该应用的 agconnect-services.json 配置文件并添加到应用的 module 目录下。
<4>在项目 build.gradle 中添加规则,以纳入 HMS 服务插件 和 华为 的 Maven 代码库,可根据华为开发者联盟发布的版本更新选择最新版本:

 buildscript {
          repositories {
              google()
              jcenter()
              mavenCentral()
              maven {url 'http://developer.huawei.com/repo/'}
          }

         dependencies {
             classpath 'com.huawei.agconnect:agcp:1.4.2.300'
         }
     }

    allprojects {
          repositories {
              google()
              jcenter()
              mavenCentral()
              maven {url 'http://developer.huawei.com/repo/'}
          }
      }

<5>在应用 module 的 build.gradle 文件底部添加 apply plugin 代码行,以启用 gradle 插件:

// ADD THIS AT THE TOP
     apply plugin: 'com.huawei.agconnect'

<6> module的build.gradle添加依赖

    dependencies {
        implementation 'com.huawei.hms:push:5.3.0.301'
        //引入极光-华为插件,如果采用此配置,无需拷贝jpush-android-plugin-huawei-v4.x.x.jar文件,也无需配置cn.jpush.android.service.PluginHuaweiPlatformsService组件
        implementation 'cn.jiguang.sdk.plugin:huawei:4.1.5'

     }                            

具体华为依赖版本问题详情请查看官方文档

<7>在build.gradle中配置在华为后台添加的指纹证书对应的签名
生成或找到一个jks文件 将文件信息配置到build.gradle中

  signingConfigs {
          release {
              storeFile file("release.keystore")//签名文件的path
              storePassword "123456"
              keyAlias "android.keystore"
              keyPassword "123456"
          }
      }

<8>在极光后台配置华为应用信息


1626919552(1).jpg

配置完之后一定要启用,否则不能发送厂商通道推送通知


1626919646(1).jpg

至此 华为厂商通道集成完毕 可以在华为手机上清除后台app 发送一个厂商通道优先的消息进行测试
(2)小米厂商通道
<1>确认android studio的 Project 根目录的主 gradle 中配置了mavenCentral支持。(新建project默认配置就支持)

    buildscript {
        repositories {
            jcenter()
            mavenCentral()
        }
            ......
    }

    allprojets {
        repositories {
            jcenter()
            mavenCentral()
        }
    }

<2>在应用 module 的 gradle 中 dependencies 节点添加依赖:

    dependencies {
        implementation 'cn.jiguang.sdk.plugin:xiaomi:4.x.x'//版本号和对应的JPush版本号相同
    }

<3>在应用 module 的 gradle 中 defaultConfig 节点添加如下代码:
注意:不能将变量前缀去掉 正确实例: MI-1234567891234

android {
....
defaultConfig {
...
    manifestPlaceholders = [

        // 设置manifest.xml中的变量
        XIAOMI_APPKEY : "MI-您的应用对应的小米的APPKEY", // 小米平台注册的appkey,注意不要将前缀去掉 MI-appkey
        XIAOMI_APPID : "MI-您的应用对应的小米的APPID", // 小米平台注册的appid,注意不要将前缀去掉 MI-appid

    ]
}
...
}

<4>由于 MiPush 的 regid 只能在主进程获取,非主进程获取到的regid为空,所以极光的 PushReceiver应寄宿于应用主进程, 需要在AndroidManifest.xml中将 PushReceiver 的分离进程配置去掉。配置示例如下:

<receiver
      android:name="cn.jpush.android.service.PushReceiver"
      tools:node="replace"
      android:enabled="true">
         <intent-filter android:priority="1000">
             <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
             <!--Required  显示通知栏 -->
             <category android:name="${applicationId}" />
         </intent-filter>
         <intent-filter>
             <action android:name="android.intent.action.USER_PRESENT" />
             <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
         </intent-filter>
         <!-- Optional -->
         <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>

这两个厂商比较有代表性,其他厂商就大同小异了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容