Android Studio集成百度推送遇到的坑
2016-12-07 15:48
337 查看
之前做过友盟推送,感觉挺简单的,因此做百度推送的时候也没当回事,结果悲剧了!!!
看过文档之后,也挺失望,现在都用AS了,百度推送官网却还是只针对eclipse集成的文档,因此看了文档之后,又进行了一番度娘,以下进行重点总结:
1.首先需要在百度推送官网创建应用,并启用推送功能,如下图。
2.在配置详情页中,扫描二维码或者点击下载SDK,可以下载对应包名的demo。
3.下载demo后,可以先安装demo中的APK测试一下。如图,成功收到消息。
到这里心里小小的窃喜一下,感觉哎呦,百度推送还是挺好用的嘛!
**4.新建一个工程,将自己需要的文件提取出来,尽可能的去掉无用的东西。**demo中包好了许多功能是你用不到的,因此需要将自己需要功能的相关文件摘出来。结果测试没问题。需要的东西如下:
pushservice-5.2.0.12.jar包,所有的.so文件,notification_custom_builder.xml(这是通知栏的布局),
AndroidManifest.xm中的权限:
建议:权限里的内容别改!!
初始化代码:
Reciver中的代码:
好了,以上内容集成进去就能满足基本的推送功能,新建一个工程,并集成以上内容,测试没问题!
需要注意的是:
.so文件要放在jniLibs文件夹中,jniLibs文件夹在main目录下,与java在同一目录
初始化代码,官方建议放在主Activity中,而非Application中
5.既然自己建的demo也没问题,那就可以集成到项目中了吧,好开始集成
jar包,.so文件,权限,布局文件,初始化代码,自己建Receiver文件等等,很快就集成完毕。
经过测试,不行!!!!!,接收不到消息。
想啊想,不知道错在哪,然后开始怀疑是不是包冲突了?然后各种方法排除测试等等,没得到任何结论!!
我用三个手机测试,分别是魅蓝note2-5.0系统,三星-4.4系统,华为mate9-6.0系统。
这三个手机,运行demo测试,均没问题,都可以接受到通知。
但项目中集成的百度推送,只有5.0系统的魅蓝手机可以接收到消息,另两个手机都不行。于是乎,开始怀疑是不是系统兼容性问题等等,无果。
然后看大神们写的博客,不小心看到一句话
http://blog.csdn.net/cdkd123/article/details/50521924
在build.gradle里要配置下:
而不是
我试了试,去掉这句话也可以。
注意,项目中本来配置着
在官网,建议使用Android Studio工具开发者,将.so文件放入jniLibs目录下,奶奶的,为啥不说清楚,gradle中也需要配置!!!
就这样,问题解决了。
此外说一下,如果要自定义铃声或通知栏样式,需要在初始化代码后面加入一下代码
特别是铃声,音频文件要放到raw文件夹下,并且代码中要将Uri路径传给cBuilder.setNotificationSound()方法。
总结一下,百度推送我遇到的大坑:
.so文件需要放入jniLibs文件加下,并且gradle中要配置路径!!
或者去掉,但是不能配置错了。
看过文档之后,也挺失望,现在都用AS了,百度推送官网却还是只针对eclipse集成的文档,因此看了文档之后,又进行了一番度娘,以下进行重点总结:
1.首先需要在百度推送官网创建应用,并启用推送功能,如下图。
2.在配置详情页中,扫描二维码或者点击下载SDK,可以下载对应包名的demo。
3.下载demo后,可以先安装demo中的APK测试一下。如图,成功收到消息。
到这里心里小小的窃喜一下,感觉哎呦,百度推送还是挺好用的嘛!
**4.新建一个工程,将自己需要的文件提取出来,尽可能的去掉无用的东西。**demo中包好了许多功能是你用不到的,因此需要将自己需要功能的相关文件摘出来。结果测试没问题。需要的东西如下:
pushservice-5.2.0.12.jar包,所有的.so文件,notification_custom_builder.xml(这是通知栏的布局),
AndroidManifest.xm中的权限:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/> <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 适配Android N系统必需的ContentProvider写权限声明,写权限包含应用包名--> <uses-permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.com.kw.crazyfrog" /> <permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.com.kw.crazyfrog" android:protectionLevel="normal"> </permission> <!-- push富媒体,不使用富媒体推送不需要 --> <activity android:name="com.baidu.android.pushservice.richmedia.MediaViewActivity" android:configChanges="orientation|keyboardHidden" android:label="MediaViewActivity" > </activity> <activity android:name="com.baidu.android.pushservice.richmedia.MediaListActivity" android:configChanges="orientation|keyboardHidden" android:label="MediaListActivity" android:launchMode="singleTask" > </activity> <!-- push富媒体结束 --> <!-- push应用定义消息receiver声明 --> <receiver android:name="com.baidu.push.example.MyPushMessageReceiver"> <intent-filter> <!-- 接收push消息 --> <action android:name="com.baidu.android.pushservice.action.MESSAGE" /> <!-- 接收bind,unbind,fetch,delete等反馈消息 --> <action android:name="com.baidu.android.pushservice.action.RECEIVE" /> <action android:name="com.baidu.android.pushservice.action.notification.CLICK" /> </intent-filter> </receiver> <!-- push必须的receviver和service声明 --> <receiver android:name="com.baidu.android.pushservice.PushServiceReceiver" android:process=":bdservice_v1"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="com.baidu.android.pushservice.action.notification.SHOW" /> <action android:name="com.baidu.android.pushservice.action.media.CLICK" /> <!-- 以下四项为可选的action声明,可大大提高service存活率和消息到达速度 --> <action android:name="android.intent.action.MEDIA_MOUNTED" /> <action android:name="android.intent.action.USER_PRESENT" /> <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /> </intent-filter> </receiver> <receiver android:name="com.baidu.android.pushservice.RegistrationReceiver" android:process=":bdservice_v1"> <intent-filter> <action android:name="com.baidu.android.pushservice.action.METHOD" /> <action android:name="com.baidu.android.pushservice.action.BIND_SYNC" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.PACKAGE_REMOVED"/> <data android:scheme="package" /> </intent-filter> </receiver> <service android:name="com.baidu.android.pushservice.PushService" android:exported="true" android:process=":bdservice_v1" > <intent-filter> <action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" /> </intent-filter> </service> <service android:name="com.baidu.android.pushservice.CommandService" android:exported="true" /> <!-- push结束 --> <!-- 适配Android N系统必需的ContentProvider声明,写权限包含应用包名--> <provider android:name="com.baidu.android.pushservice.PushInfoProvider" android:authorities="com.baidu.push.example.bdpush" android:writePermission="baidu.push.permission.WRITE_PUSHINFOPROVIDER.com.kw.crazyfrog" android:protectionLevel = "signature" android:exported="true" /> <!-- 在百度开发者中心查询应用的API Key --> <meta-data android:name="api_key" android:value="ohdmT4bU6ODBsBvPG21GADrb" />
建议:权限里的内容别改!!
初始化代码:
PushManager.startWork(getApplicationContext(), PushConstants.LOGIN_TYPE_API_KEY, "自己的API-KEY");
Reciver中的代码:
public class MyReceiver extends PushMessageReceiver { @Override public void onBind(Context context, int i, String s, String s1, String s2, String s3) { } @Override public void onUnbind(Context context, int i, String s) { } @Override public void onSetTags(Context context, int i, List<String> list, List<String> list1, String s) { } @Override public void onDelTags(Context context, int i, List<String> list, List<String> list1, String s) { } @Override public void onListTags(Context context, int i, List<String> list, String s) { } @Override public void onMessage(Context context, String s, String s1) { } @Override public void onNotificationClicked(Context context, String s, String s1, String s2) { } @Override public void onNotificationArrived(Context context, String s, String s1, String s2) { } }
好了,以上内容集成进去就能满足基本的推送功能,新建一个工程,并集成以上内容,测试没问题!
需要注意的是:
.so文件要放在jniLibs文件夹中,jniLibs文件夹在main目录下,与java在同一目录
初始化代码,官方建议放在主Activity中,而非Application中
5.既然自己建的demo也没问题,那就可以集成到项目中了吧,好开始集成
jar包,.so文件,权限,布局文件,初始化代码,自己建Receiver文件等等,很快就集成完毕。
经过测试,不行!!!!!,接收不到消息。
想啊想,不知道错在哪,然后开始怀疑是不是包冲突了?然后各种方法排除测试等等,没得到任何结论!!
我用三个手机测试,分别是魅蓝note2-5.0系统,三星-4.4系统,华为mate9-6.0系统。
这三个手机,运行demo测试,均没问题,都可以接受到通知。
但项目中集成的百度推送,只有5.0系统的魅蓝手机可以接收到消息,另两个手机都不行。于是乎,开始怀疑是不是系统兼容性问题等等,无果。
然后看大神们写的博客,不小心看到一句话
http://blog.csdn.net/cdkd123/article/details/50521924
在build.gradle里要配置下:
sourceSets { main { jniLibs.srcDirs = ['src/main/jniLibs'] } }
而不是
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
我试了试,去掉这句话也可以。
注意,项目中本来配置着
在官网,建议使用Android Studio工具开发者,将.so文件放入jniLibs目录下,奶奶的,为啥不说清楚,gradle中也需要配置!!!
就这样,问题解决了。
此外说一下,如果要自定义铃声或通知栏样式,需要在初始化代码后面加入一下代码
Resources resource = this.getResources(); String pkgName = this.getPackageName(); CustomPushNotificationBuilder cBuilder = new CustomPushNotificationBuilder( resource.getIdentifier( "notification_custom_builder", "layout", pkgName), resource.getIdentifier("notification_icon", "id", pkgName), resource.getIdentifier("notification_title", "id", pkgName), resource.getIdentifier("notification_text", "id", pkgName)); cBuilder.setNotificationFlags(Notification.FLAG_AUTO_CANCEL); cBuilder.setNotificationDefaults(Notification.DEFAULT_VIBRATE); cBuilder.setStatusbarIcon(this.getApplicationInfo().icon); cBuilder.setLayoutDrawable(resource.getIdentifier( "rty", "drawable", pkgName)); cBuilder.setNotificationSound((Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.kuangwa)).toString()); // 推送高级设置,通知栏样式设置为下面的ID PushManager.setNotificationBuilder(this, 1, cBuilder);
特别是铃声,音频文件要放到raw文件夹下,并且代码中要将Uri路径传给cBuilder.setNotificationSound()方法。
总结一下,百度推送我遇到的大坑:
.so文件需要放入jniLibs文件加下,并且gradle中要配置路径!!
sourceSets { main { jniLibs.srcDirs = ['src/main/jniLibs'] } }
或者去掉,但是不能配置错了。
相关文章推荐
- Android studio一分钟集成极光推送以及集成时遇到的混淆神坑
- Android学习(7)---Android Studio集成百度地图SDK时获取SHA1与遇到的错误
- Android studio集成svn遇到的一些问题与使用
- Android studio 集成arr包,遇到的坑
- Android Studio 集成Kotlin遇到的错误
- Android studio 集成umeng友盟分享组件5.2.1遇到的问题解决mark
- Crosswalk集成到Android Studio,替代原生WebView遇到的问题
- Android Studio遇到的一些问题
- Android开发——集成友盟社会化分享遇到的坑(二)
- Xfire集成到web 项目中遇到的问题 及解决方法
- 关于Android Studio 导入Library Project 以及遇到的一些问题
- iOS集成支付宝遇到的问题一:Cannot find interface declarationfor'NSObject', superclass of'Base64'
- Android集成Google支付,以及遇到的坑、坑
- 使用Android studio所遇到的问题
- Android Studio如何集成Genymotion
- eclipse转成Android studio过程中遇到的问题
- android studio 导入项目时遇到的坑
- 使用Android Studio半年来遇到的一些问题解决方案总结
- Android Studio一步步教你集成发布适配
- 集成环信遇到的问题以及解决方法