使用android studio运行App到手机上可以推送,打包下来安装就收不到推送!!!(没混淆)


(Ivan Fong) #1

使用android studio,直接使用Run app跑在真机上测试,可以收到推送,有RegistrationID。

打包下来,不管是build APK还是generate signed APK,就收不到推送,也没有RegistrationID。
(打包没做混淆)

把getRegistrationID()方法写在onResure()中,反复获取还是没有数据。

然后就看了Run App的脚本是这么使用的:
adb install-multiple -r /home/ivan/AndroidStudioProjects/testing/SocProject2/app/build/intermediates/split-apk/debug/dep/dependencies.apk /home/ivan/AndroidStudioProjects/testing/SocProject2/app/build/intermediates/split-apk/debug/slices/slice_8.apk /home/ivan/AndroidStudioProjects/testing/SocProject2/app/build/intermediates/split-apk/debug/slices/slice_4.apk /home/ivan/AndroidStudioProjects/testing/SocProject2/app/build/intermediates/split-apk/debug/slices/slice_1.apk /home/ivan/AndroidStudioProjects/testing/SocProject2/app/build/intermediates/split-apk/debug/slices/slice_2.apk /home/ivan/AndroidStudioProjects/testing/SocProject2/app/build/intermediates/split-apk/debug/slices/slice_5.apk /home/ivan/AndroidStudioProjects/testing/SocProject2/app/build/intermediates/split-apk/debug/slices/slice_3.apk /home/ivan/AndroidStudioProjects/testing/SocProject2/app/build/intermediates/split-apk/debug/slices/slice_7.apk /home/ivan/AndroidStudioProjects/testing/SocProject2/app/build/intermediates/split-apk/debug/slices/slice_6.apk /home/ivan/AndroidStudioProjects/testing/SocProject2/app/build/intermediates/split-apk/debug/slices/slice_9.apk /home/ivan/AndroidStudioProjects/testing/SocProject2/app/build/intermediates/split-apk/debug/slices/slice_0.apk /home/ivan/AndroidStudioProjects/testing/SocProject2/app/build/outputs/apk/app-debug.apk
使用这个命令安装后,自然跟使用Run App一样可以拿到RegistrationID,也可以受到推送。

请问这是什么问题造成的呢,打包以后不能推送很着急啊!!!
感谢回答!


#2

提供你打包后客户端的集成日志,完整的帖上文本


(Ivan Fong) #3

logJPUSH.txt (1.0 MB)
自己看了下,没找到点更不知道哪里入手解决。麻烦您了。


#4

极光相关的日志太少了,这日志里没有报错也没有正常成功的打印,请检查是否有开启debug,是否看的是完整的主进程日志


(Ivan Fong) #5

我这是一个用cordova生成的安卓项目,cordova项目文件已经没有了,只有安卓端的代码了。
不知是否还能使用cordova的插件接入JPUSH?

现在使用的是安卓集成的方式接入JPUSH的,因为放在Application中偶尔出现在启动中卡顿的问题。
(因为启动有做IO操作,不知是否JPUSH也有?所以导致阻塞?)
我把初始化代码放到了主页面的onCreate()中,并放在子线程中。经过测试也没什么问题。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.components_test);
    new Thread() {
        @Override
        public void run() {
            JPushInterface.setDebugMode(true);
            JPushInterface.init(FacadeActivity.this);
        }
    }.start();

    ......

为了方便地得知是否获取到RegistrationID,把方法也放在了主页面的onResume()中。

@Override
protected void onResume() {
    super.onResume();
    Log.e(TAG, "onResume - getRegistrationID: " + JPushInterface.getRegistrationID(this));
}

接入JPUSH只使用了这么简单的几句代码,使用run app跑起来测试也没是问题,打包后就不行了。

buildTypes {
    release {
        debuggable true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

情况基本全部概括下来就是这样了,debug应该是打开了,混淆也是默认关闭的。


#6

1、可以使用最新的phonegap插件


2、使用插件请仔细根据readme进行
3、即便使用插件,也会有极光的日志,你给的日志里极光相关的非常少,根本没有什么信息可以分析

4、再检查有没有 调用stoppush
5、再调用最新的方法监听下长连接状态getConnectionState


(Ivan Fong) #7

因为对cordova不熟悉,所以先尝试能不能解决。

这是直接运行的

06-22 14:33:21.691 28553-28553/com.csair.soc.test E/FacadeActivity: onResume - getRegistrationID: 18071adc033b6525b11
06-22 14:33:21.691 28553-28553/com.csair.soc.test E/FacadeActivity: onResume - isPushStopped: false
06-22 14:33:21.691 28553-28553/com.csair.soc.test E/FacadeActivity: onResume - getConnectionState: true

这是打包的

06-22 14:36:51.411 3521-3521/com.csair.soc.test E/FacadeActivity: onResume - getRegistrationID:
06-22 14:36:51.411 3521-3521/com.csair.soc.test E/FacadeActivity: onResume - isPushStopped: false
06-22 14:36:51.411 3521-3521/com.csair.soc.test E/FacadeActivity: onResume - getConnectionState: false

我还在log语句上面调用JPushInterface.onResume(this);,好像并没有给我重新连接。


#8

onresume不是重连的API,是解除stoppush的API

这说明你连接是断开的,我建议你还是加一下混淆时极光的相关的处理


https://docs.jiguang.cn/jpush/client/Android/android_guide/#_6


(Ivan Fong) #9

我开启混淆后,也做了相应的混淆忽略。
问题还是一样,打包后,获取不到RegistrationID,ConnectionState为false。

我也尝试使用cordova插件的方式接入JPUSH,在AS下运行也是没有问题,可以受到推送。
打包以后问题依旧。
测试手机3个都是这个情况。估计不是手机问题。

以下是使用cordova插件方式集成的log:

06-22 18:56:59.643 9033-9033/com.csair.soc.test I/chromium: [INFO:CONSOLE(21)] "JPushPlugin:Device ready!", source: file:///storage/emulated/0/com.csair.soc.test/www/phone/login.html (21)
06-22 18:57:06.473 9033-9033/com.csair.soc.test I/chromium: [INFO:CONSOLE(31)] "JPushPlugin:registrationID is ", source: file:///storage/emulated/0/com.csair.soc.test/www/phone/login.html (31)
06-22 18:57:07.453 9033-9033/com.csair.soc.test I/chromium: [INFO:CONSOLE(31)] "JPushPlugin:registrationID is ", source: file:///storage/emulated/0/com.csair.soc.test/www/phone/login.html (31)
06-22 18:57:08.453 9033-9033/com.csair.soc.test I/chromium: [INFO:CONSOLE(31)] "JPushPlugin:registrationID is ", source: file:///storage/emulated/0/com.csair.soc.test/www/phone/login.html (31)

打包以后会一直获取JPushPlugin:registrationID,死循环并且一直获取不到数据。
没打包的情况是一条就出数据并且不在获取了。

麻烦您再提供点头绪!我这里没啥办法了


#10

你现在用的 cordova插件的版本是多少?是单纯的cordova项目还是ionic?


(Ivan Fong) #11

应该只是单纯的cordova,我全局搜索没有搜到任何有关ionic的东西。
插件版本的话,我是新建了一个cordova项目,然后使用命令安装的。

cordova plugin add jpush-phonegap-plugin --variable APP_KEY=your_jpush_appkey

然后再把相应的文件移植到自己的安卓项目中去的,应该是最新的版本吧。

我刚刚直接使用你们快速集成的demo打包下来测试,是没有问题的。应该不是打包跟混淆的问题。

奇怪的就是为什么我两种方式接入后都可以正常受到推送,打包以后就收不到推送。

我在JPushInterface.init()方法后面马上调用JPushInterface.getConnectionState(),同样是false的,
也没有什么错误信息说init失败啊。


(Hevin) #12

用插件的 demo 测试过吗?我这里这样打包出来安装是 ok 的。


(Ivan Fong) #13

demo测试都没问题,集成进自己的项目才出问题的。
使用run app的脚本命令安装也是没问题的,可打包后才有问题。。。。


(Ivan Fong) #14
<service
    android:name="cn.jpush.android.service.PushService"
    android:exported="false">
    <!--android:process=":mult"-->

我把默认继承时多开的mult进程给注视了,问题好像是解决了。暂时没什么问题。
可进程却一直在重启。请问是什么原因呢!
而且不如不是多开一条mult,极光SDK提供的相互调起之类的功能,还能使用吗


#15

重新启动问题应是受到了什么限制吧,之前出现的反馈说长连接初始化完成就断开的,原因是混淆。
这种情况到还没有反馈过

配置拉起是这个,你给的这里是配置多进程的


(Ivan Fong) #16

一开始碰到的打包后收不到推送的问题应该并不是混淆的问题。
我只是把多开进程的属性注释掉就可以了,其他都没修改,打包后就可以收到推送了。
<!--android:process=":mult"-->
不过有一台测试机,并没有出现notifiation消息,只能在loacat中看到推送消息。
我现在想请教的是,我把这个属性注释掉,会有什么影响?
而且注释掉以后PushService进程跟程序同一个进程,就导致程序一直重启(后台应用是显示正在重新启动)。
请问怎么解决?


#17

注释后,就代表你取消配置这个多进程,你自己没在这个进程里做有关极光的关键操作就行

没有展示出来,请阅读

正常配置下,是不会导致进程一直重启的!


(Ivan Fong) #18

我知道注释了就代表我取消配置多进程。:sweat:
我就是想告诉你们这么一个情况,我正常配置集成SDK,‘Run App’时也是长连接正常,推送正常。
打包以后就失败了,可我取消配置多进程后就没问题了。
官方demo是把PushService服务多开一进程中使用的,我取消以后却解决了打包后失败推送的问题,可还会不会有其他问题呢。

还有最重要的,我就是简单的集成,无论是手工集成还是jcenter自动集成,都是导致程序一直重启。!!!
想请您帮我分析下会是什么问题造成的。不集成推送,程序不会这样子的。


(Hevin) #19

重启肯定会有日志的,看下能不能提供下日志。


#20

1、看一下客户端日志中有没有什么提示
2、demo即便去掉了多进程也不会有问题的