集成极光推送和厂商通道相关总结

集光的sdk分为公有云部署和私有云部署,两者集成的步骤大同小异,自己开发的项目使用的是极光私有云部署,个人认为集成过程主要分为两部分:

  • 集成极光sdk, 使用极光通道进行推送

  • 集成厂商通道并进行推送(因为app在后台被杀死的情况下无法收到推送,所以只集成极光通道实用性不大,还是需要集成厂商通道)

关于自定义的广播、设置别名、获取RegistrationId等具体代码可以下载官网demo示例查看(Android 集成极光推送和厂商通道这篇博客写的比较详细), 自己这篇博客是对集成极光推送过程中遇到的问题,尤其是集成厂商通道过程中踩到的坑作以总结。

一、集成极光sdk

极光厂商给的说明文档中关于集成sdk的步骤写的比较详细,此处简单作以介绍,因为自己开发的项目中采用的是极光私有化部署,所以公有云sdk的初始化api有一定区别。

1、导入jar包或者aar包

将极光的jar报或者aar放入libs目录中,并在gradle文件中作以下配置进行引用:

dependencies {
    implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
}

2、build.gradle配置

    productFlavors {

        //内网研发
        develop {
            applicationId 'com.****.develop'
            .....
            manifestPlaceholders = [
                    //在清单文件中引用
                    app_name: "金色**(内网)",
                    app_icon: "@mipmap/ic_launcher_nw",
                    //极光相关配置信息, 便于在清单文件中引用, appkey一定要和包名对应
                    JIGUANG_PRIVATES_CHANNEL: "developer-default",
                    JIGUANG_PRIVATES_APPKEY : "1023984109843aasldkfj",
                    JIGUANG_PRIVATES_PROCESS: ":remote",
            ]
        }
     }

要注意的是这里的applicationId对应的包名、JIGUANG_PRIVATES_APPKEY 的值一定要和极光控制台上的应用包名、appkey一致,如果不一致是收不到推送的自己就是在粘贴控制台的appkey到项目中的时候多了一个空格,造成无法收到推送,耽误了不少时间。 如下图所示

4801

4802

3、创建必须的组件并配置清单文件

参考厂商的demo示例代码创建Service和Receiver, 并在清单文件中配置, 配置完成后不要忘记在清单文件中声明所必要的权限。

				    <!-- 必须,网络权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 可选,通知震动 -->
    <uses-permission android:name="android.permission.VIBRATE" /> 

        <!-- 由于此类具有长连接功能,手机厂商省电优化时可能直接杀死包名带jiguang字样的service -->
        <!-- 所以需要开发者继承cn.jiguang.app.component.JCommonService,提升长连接存活率,已达到提高消息到达率的目的 -->
        <service
            android:name="cn.jiguang.app.component.UserService"
            android:exported="false"
            android:process="${JIGUANG_PRIVATES_PROCESS}">
            <intent-filter>
                <action android:name="cn.jiguang.privates.intent.USER_SERVICE" />
            </intent-filter>
        </service>

        <!-- 用于接收极光业务的回调,包含了长连接状态/通知开关状态/通知消息到达/通知消息点击/通知消息删除/自定义消息/tag操作/alias操作/厂商token回调 -->
        <!-- 不需要配置子进程,此回调中在主进程中,方便业务操作 -->
        <receiver
            android:name="cn.jiguang.app.component.UserReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="cn.jiguang.privates.intent.USER_RECEIVER" />
            </intent-filter>
        </receiver>

4、sdk的初始化

在Application类的onCreat方法中初始化sdk,根据自己的环境设置相应的参数值,不同版本的sdk代码会略有不同。注意不需要重新开启子线程,sdk内部有判断。

        JCorePrivatesApi.configAddress(this, new Address()
                // 默认连接ip,注意ip是数字组合,host才是字母组合
                .setDefaultIp("100.24.24.159")
                // 默认连接端口
                .setDefaultPort(3000)
                // 上报地址,不需要配置/v3/report和/v1/sdk/report地址,只需要http://ip+port或着域名即可
                .setDefaultReportUrl("http://pricloud-master-badgeapi.glqas.jpushoa.com"));

        // 必须在application.onCreate中配置,不要判断进程,sdk内部有判断
        JCorePrivatesApi.configDebugMode(this, true);
				
				// 后台没升级tag: V3.5.4-newportal-20210823-gamma.57版本,前端必须调用此方法,否则通知点击跳转有问题
				// JPushPrivatesApi.configOldPushVersion(context.getApplicationContext());
				
        // 初始化推送
         JPushPrivatesApi.init(this);

5、推送的测试

如何判断sdk是否集成成功了呢? 为了避免原有apk的影响,先卸载已经安装的app,然后运行打包。

使用关键字 jiguang过滤日志,如果获取到了RegistrationId的值就说明集成成功了, 然后在控制台使用RegistrationId进行推送测试。 要注意的是 部分手机默认通知选项是没有打开的,需要手动设置允许通知

6、 小结

集成极光通道其实并不复杂,按照厂商给的demo和说明文档集成即可,只要细心一些很容成功,需要注意的一个地方就是项目中配置的appkey、包名要和控制台设置的要一致。

二、集成厂商通道

目前高版本的系统在用户安装完应用的时候,会默认勾选一个锁屏清理后台应用的选项, 即便没有选择这个选项,当内存不足的情况下app所在的进程也会被杀死, 这种情况下极光通道是无法收到通知,所以只集成极光通道而不集成厂商通道时没有什么实用性的。

2.1、 注意事项(踩到的坑)

集成厂商通道的过程中踩了不少坑,有些配置注意事项极光的厂商也没有详细说明,华为厂商通道的说明文档也没有写清楚,所以耗费了很大的精力。自己开发的项目集成了华为、小米、opple这三型号手机的厂商通道, 自己遇到的坑或者说特别耗费精力的主要有如下几点:

  • 项目不需要审核通过也可以测试(使用)推送,只要创建好应用,填写完应用信息,设置好应用签名,点击保存即可进行推送测试, 这一点华为没有给出明确说明( 而opple在页面上给出了说明,未审核通过的项目每天只能推送1000条), 自己误认为只有项目审核通过的情况下才可以测试推送,然后就吭哧吭哧开始提交审核,而准备各种审核材料(软著、权限说明、隐私证明、加固包)又是一项特别耗时的事情, 好不容易审核资料凑齐了,又因为提前索权的问题被连续拒绝了好几次。
  • appkey相关参数配置错误的问题(例如appkey粘贴的时候多了一个空格)
  • 极光后台相关配置没有开启的问题(例如集成厂商通道时,极光控制台配置中的厂商通道优先选项自己没有打开)
  • 用户手机没有打开允许通知的权限(有些手机默认会打开通知,但是也有的手机默认情况下不允许接受通知),小米的部分手机需要在通知的设置中的广告营销选项,才可以收到推送

2.2 、 集成华为厂商通道

注意: app不需要审核通过也可以测试推送,只要你的项目不需要在华为应用商店上架,完全不需要进行提交审核,准备各种审核材料的时候特别浪费时间。 自己认为集成华为厂商通道是这三种手机型号中相对来说比较复杂的一个, 集成华为厂商通道可以参考极光提供的集成文档:JPush SDK华为厂商集成文档(3.5.4 及以上)

1. 集成厂商通道的sdk

将华为厂商通道的jar报放到libs目录中。

华为是通过读取agconnect-services.json来进行推送的,而其它的厂商,例如opple和小米只需要在build.gradle中文件中配置appId和appkey即可。

2. 获取agconnect-services.json文件

首先打开链接华为开发者联盟,注册华为开发者账号,新建项目并创建应用,一个项目下可以创建多个应用,例如自己开发的项目有三个环境:研发、预生产、生产, 那么就可以在这个项目中创建三个应用,然后在项目中配置多渠道打包即可。关于多渠道打包可以参考官方文档 配置支持多Flavor

当我们创建好项目和应用后,填写相关的信息, 如果自己的项目不需要上架的话,那么就不用提交审核,资料随便填写就行。 填写完成后,配置应用签名。填写应用信息和设置应用签名在下图所示页面

4804

填写完应用信息,设置完应用签名后, 点击我的项目就会进入下图所示页面,图中1位置显示的就是项目的名称,点击下拉框就可以选择不同项目。 2的位置就是选择应用的下拉框, 可以在下拉框中选择不同环境的应用

4803

在2的位置选择正式环境的应用,然后点击3的位置下载agconnect-services.json文件, 将其放在应用app的根目录中。

4812

json文件的内容如下所示, client这个节点中的package_name"就是上面选择的正式环境应用的包名,appInfos就是不同环境(渠道)应用的信息 。 华为是通过读取这个json文件中的配置信息,而其它厂商是通过读取gradle中的配置信息进行推送的。

{
  ...
	"client":{
		"cp_id":"akdjfklajlfkd",
		"product_id":"lakjdflkjal",
		"client_id":"alskdjflkad",
		"client_secret":"alkjdflkaldfa",
		"project_id":"lakjsdflka",
		"app_id":"kjhkj",
		"api_key":"alsdjfklalkdjfla",
		"package_name":"com.app.develop"
	},
	"oauth_client":{
		"client_id":"adsfafadsf",
		"client_type":1
	},
	"app_info":{
		"app_id":"adfadfs",
		"package_name":"com.app.develop"
	},
  ...
	"appInfos":[
		{
			"package_name":"com.app.develop.develop",
			"client":{
				"app_id":"afdafda"
			},
			"app_info":{
				"package_name":"com.app.develop.develop",
				"app_id":"asdfasfd"
			},
			"oauth_client":{
				"client_type":1,
				"client_id":"adfasdf"
			}
		},
		{
			"package_name":"com.app.develop.test",
			"client":{
				"app_id":"adfafds"
			},
			"app_info":{
				"package_name":"com.app.develop.test",
				"app_id":"adsfaf"
			},
			"oauth_client":{
				"client_type":1,
				"client_id":"adfafdadf"
			}
		}

	]

还有一点需要注意,就是不要忘记开通推送权限,如下图所示

4808

3. 配置gradle文件

上面这种使用同一个json文件来配置多渠道的方式需要项目集成1.5.0.300及以上版本的AGC插件,所以需要在项目的gradle中进行配置, 可以参考 华为多渠道配置说明文档和极光提供的文档JPush SDK华为厂商集成文档(3.5.4 及以上)


    repositories {
      ...
        maven {url 'https://developer.huawei.com/repo/'}
    }
    dependencies {
        classpath 'com.huawei.agconnect:agcp:1.5.2.300'
    }
}

allprojects {
    repositories {
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

在app的module的gradle文件中配置如下代码


apply plugin: 'com.huawei.agconnect'
android {
    implementation 'com.huawei.hms:push:5.0.2.300'
}
4.配置极光后台

在极光的后台配置appid和app sec,app sec 对应的华为控制台中的Client Secret 如下图所示

在这里插入图片描述

4806

然后打开厂商通道优先设置,否则默认会走极光通道

4807

5. 测试通知

以上的配置都完成后,基本就算集成完成,运行项目,如果在控制台获取到了华为厂商通道的token,就说明集成成功了。然后使用极光返回的RegistrationId进行推送测试, 测试的时候一定要注意将手机的通知打开。

6. 关于debug和release环境的调试

在下图红框的位置分别添加debug和release证书sha256指纹,以便测试debug环境和release环境。

4809

2.3 、集成小米厂商通道和opple厂商通道

这两个厂商通道集成起来就相对简单些, 都是先注册账号,创建多个测试环境的应用, 填写应用信息,配置签名(小米不需要设置,opple需要设置) ,开启推送服务(这一步千万不要忘记) 。 然后在项目的gradle文件中配置appkey和appid。 此处以小米为例

1. 创建应用

创建应用并填写相关信息,填写完成后如下图所示

4810

点击应用信息就可以看到appid、appkey等信息。

2、配置项目

首先是将厂商通道的jar或者aar包放到libs目录中。

然后打开gradle文件,配置appkey和appid, 如下代码所示, MI-1234134 中中划线后边的值就是小米后台注册生成的appid, 一定不要漏掉前面的MI

   productFlavors {

        //内网研发
        develop {
            applicationId '*********.develop'
           ....
            manifestPlaceholders = [
                    XIAOMI_APPID            : "MI-1234134",
                    XIAOMI_APPKEY           : "MI-lkjfdaljlkdfj",
                    OPPO_APPID    : "OP-12345",
                    OPPO_APPKEY   : "OP-12345",
                    OPPO_APPSECRET: "OP-12345",
            ]
        }

        //预生产
        check {
            applicationId '*********.test'
            resValue("string" , "name","预生产")
          ....
            manifestPlaceholders = [
                    XIAOMI_APPKEY : "MI-akdjhfkla",//小米平台注册的appkey
                    XIAOMI_APPID  : "MI-alkjdflka",//小米平台注册的appid
                    //对应的是预生产包名和debug签名
                    OPPO_APPID    : "OP-alkjdfla",
                    OPPO_APPKEY   : "OP-lksjdfgkskldf",
                    OPPO_APPSECRET: "OP-qoieuropqure",

            ]
        }
}

opple需要配置三个值,appid和appkey分别对应opple控值台注册生成的appid和appkey, OPPO_APPSECRET对应的是下图中的 appsecret

4811

3. 测试推送

和测试华为推送厂商通道一样,如果在日志中能够获取到小米的返回的token,就说明集成成功了,然后在极光控制台使用RegistrationId进行推送。

需要注意小米部分型号手机需要将通知设置中的广告营销选项中的允许通知开关打开,才可以收到推送。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Spring Boot集成极光推送的步骤: 1. 在pom.xml文件中添加极光推送的依赖: ```xml <dependency> <groupId>cn.jiguang</groupId> <artifactId>jpush-spring-boot-starter</artifactId> <version>3.4.0</version> </dependency> ``` 2. 在application.yml或application.properties文件中配置极光推送相关信息: ```yaml jpush: app-key: f54*******************92 master-secret: d6*****************055 production: true ``` 请注意将上述代码中的app-key和master-secret替换为你自己的极光推送的AppKey和AppSecret。 3. 创建一个推送服务类,用于发送推送消息: ```java import cn.jpush.api.JPushClient; import cn.jpush.api.push.PushResult; import cn.jpush.api.push.model.Message; import cn.jpush.api.push.model.Platform; import cn.jpush.api.push.model.PushPayload; import cn.jpush.api.push.model.audience.Audience; import cn.jpush.api.push.model.notification.Notification; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service public class JPushService { @Value("${jpush.app-key}") private String appKey; @Value("${jpush.master-secret}") private String masterSecret; @Value("${jpush.production}") private boolean production; public void sendPush(String message) { JPushClient jpushClient = new JPushClient(masterSecret, appKey); PushPayload payload = PushPayload.newBuilder() .setPlatform(Platform.all()) .setAudience(Audience.all()) .setMessage(Message.content(message)) .build(); try { PushResult result = jpushClient.sendPush(payload); System.out.println("推送结果:" + result); } catch (Exception e) { e.printStackTrace(); } } } ``` 4. 在需要发送推送消息的地方调用推送服务类的sendPush方法: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class PushController { @Autowired private JPushService jPushService; @GetMapping("/push") public String pushMessage() { jPushService.sendPush("这是一条测试推送消息"); return "推送成功"; } } ``` 以上代码演示了如何在Spring Boot中集成极光推送,并发送一条推送消息。你可以根据自己的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值