即时推送--个推的集成过程整理
来源:互联网 发布:小强软件测试 编辑:程序博客网 时间:2024/04/24 16:55
关于第三方即使推送现在有个推,极光, 友盟等, 百度推送,信鸽,阿里云这些就不说了 之前用过极光还行 ,现在把个推的官方文档集成一下,官方的说明不是太好,过程中出了许多小问题也一并记录在内,希望有用到的可以有所帮助
allprojects {
repositories {
jcenter()
maven {
url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/"
}
}
}
第二步:配置依赖
在app/build.gradle文件中配置依赖库,如下所示:
//相关配置
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.getui:sdk:+'
compile 'com.android.support:support-v4:+'
}
第三步:配置 so 库
在gradle.properties文件中配置useDeprecatedNdk,如下所示:
android.useDeprecatedNdk=true
在app/build.gradle文件中android/defaultConfig下指定需要 cup 架构的 so 库,如下图所示:android { ... defaultConfig { ... ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "mips", "mips64", "x86", "x86_64" } }}注:如果 project 中包含其他 so 库且只支持某几种 cpu 架构,那么应该根据其他 so 库支持的 cpu 架构来配置
在Application标签内加入如下服务声明:
<!-- 个推SDK配置开始 -->
<!-- 配置的第三方参数属性 -->
<meta-data
android:name="PUSH_APPID"
android:value="你的APPID" /> <!-- 替换为第三方应用的APPID -->
<meta-data
android:name="PUSH_APPKEY"
android:value="你的APPKEY" /> <!-- 替换为第三方应用的APPKEY -->
<meta-data
android:name="PUSH_APPSECRET"
android:value="你的APPSECRET" /> <!-- 替换为第三方应用的APPSECRET -->
<!-- 配置SDK核心服务 -->
<service
android:name="com.igexin.sdk.PushService"
android:exported="true"
android:label="NotificationCenter"
android:process=":pushservice" >
<intent-filter>
<action android:name="com.igexin.sdk.action.service.message"/>
</intent-filter>
</service>
<service
android:name="com.igexin.sdk.PushServiceUser"
android:exported="true"
android:label="NotificationCenterUser">
<intent-filter>
<action android:name="com.igexin.sdk.action.user.message"/>
</intent-filter>
</service>
<receiver android:name="com.igexin.sdk.PushReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="com.igexin.sdk.action.refreshls" />
<!-- 以下三项为可选的action声明,可大大提高service存活率和消息到达速度 -->
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<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.igexin.sdk.PushManagerReceiver"
android:exported="false" >
<intent-filter>
<action android:name="com.igexin.sdk.action.pushmanager" />
</intent-filter>
</receiver>
<activity
android:name="com.igexin.sdk.PushActivity"
android:excludeFromRecents="true"
android:exported="false"
android:process=":pushservice"
android:taskAffinity="com.igexin.sdk.PushActivityTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name="com.igexin.sdk.GActivity"
android:excludeFromRecents="true"
android:exported="true"
android:process=":pushservice"
android:taskAffinity="com.igexin.sdk.PushActivityTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<service
android:name="com.igexin.download.DownloadService"
android:process=":pushservice" />
<receiver android:name="com.igexin.download.DownloadReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<provider
android:name="com.igexin.download.DownloadProvider"
<!-- 把"你的包名"替换为第三方应用的包名 -->
android:authorities="downloads.你的包名"
android:exported="true"
android:process=":pushservice" />
<!-- 个推SDK配置结束 -->
在Application标签外加入个推SDK运行时需要的权限:
<!-- 解决Android L上通知显示异常问题,targetSdkVersion需要设置成22 -->
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="22" />
<!-- 个推SDK权限配置开始 -->
<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.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<!-- iBeancon功能与个推3.0电子围栏功能所需要的权限为非必需的可选择权限,可以选择性配置,以便使用个推3.0电子围栏功能 -->;
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!-- 个推3.0电子围栏功能所需权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 浮动通知权限 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<!-- 自定义权限 -->
<uses-permission android:name="getui.permission.GetuiService.你的包名" />
<!--替换为第三方应用的包名-->
<permission
android:name="getui.permission.GetuiService.你的包名"
android:protectionLevel="normal" >
</permission><!--替换为第三方应用的包名-->
<!-- 个推SDK权限配置结束 -->
/参数说明
manifestPlaceholders = [
GETUI_APP_ID : "APP_ID",
GETUI_APP_KEY : "APP_KEY",
GETUI_APP_SECRET : "APPSECRET",
PACKAGE_NAME : applicationId
]
//APP_ID、APP_KEY、APP_SECRET请根据个推开发者后台申请到的应用参数进行相应替换
根据业务需要,在AndroidManifest.xml添加用于接收透传消息的BroadcastReceiver,第三方开发者需要自行实现该BroadcastReceiver,以便接收CID信息和服务端推送的透传消息。
<!-- 配置第三方Receiver -->
<!-- 此处com.getui.demo.PushDemoReceiver,需要替换成开发者自己的BroadcastReceiver文件全名-->
<receiver
android:name="com.getui.demo.PushDemoReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.igexin.sdk.action.${GETUI_APP_ID}" />//此处替换为为申请的appid才可以有透传功能并且获取到 clientid
</intent-filter>
</receiver>
在混淆文件中加入如下配置即可:
-dontwarn com.igexin.**-keep class com.igexin.**{*;}
遇到NDK与gradle的报错,将其换位gradle2.10 然后在gradle.properties加上android.useDeprecatedNdk=true
配置可选权限
该接入方式已包含个推服务所需必备权限,在此之外,您也可以在自己的AndroidManifest.xml中配置以下可选权限,以便使用个推3.0电子围栏功能。
<!-- iBeancon功能所需权限 -->;
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!-- 个推3.0电子围栏功能所需权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
导入通知栏图标
为了修改通知栏提示图标,请在res/drawable-hdpi/、res/drawable-mdpi/、res/drawable-ldpi/等各分辨率资源目录下,放置相应尺寸的push.png图片。
将 “GETUI_ANDROID_SDK\资源文件\layout”下的xml布局文件复制到app模块的layout文件夹中:
如果您的工程启用了资源精简,即在build.gradle中指定如下参数:
buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' }}
需要在res/raw中添加keep.xml,明确指定个推SDK所需的layout资源文件不能被精简,keep.xml文件:
keep.xml文件内容如下:如此可以完成layout资源保护工作。
<?xml version="1.0" encoding="utf-8"?>
<resourcesxmlns:tools="http://schemas.android.com/tools"tools:keep="@layout/getui_notification"/>
Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:53:9-55:53 to override.
1.在Manifest标签下添加 tag:xmlns:tools="http://schemas.android.com/tools"
2.在Application标签下添加tag:
tools:replace="android:value"
<applicationtools:replace="icon, label" ../>
allprojects {
repositories {
jcenter()
maven {
url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/"
}
}
}
第二步:配置依赖
在app/build.gradle文件中配置依赖库,如下所示:
//相关配置
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.getui:sdk:+'
compile 'com.android.support:support-v4:+'
}
第三步:配置 so 库
在gradle.properties文件中配置useDeprecatedNdk,如下所示:
android.useDeprecatedNdk=true
在app/build.gradle文件中android/defaultConfig下指定需要 cup 架构的 so 库,如下图所示:android { ... defaultConfig { ... ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "mips", "mips64", "x86", "x86_64" } }}注:如果 project 中包含其他 so 库且只支持某几种 cpu 架构,那么应该根据其他 so 库支持的 cpu 架构来配置
在Application标签内加入如下服务声明:
<!-- 个推SDK配置开始 -->
<!-- 配置的第三方参数属性 -->
<meta-data
android:name="PUSH_APPID"
android:value="你的APPID" /> <!-- 替换为第三方应用的APPID -->
<meta-data
android:name="PUSH_APPKEY"
android:value="你的APPKEY" /> <!-- 替换为第三方应用的APPKEY -->
<meta-data
android:name="PUSH_APPSECRET"
android:value="你的APPSECRET" /> <!-- 替换为第三方应用的APPSECRET -->
<!-- 配置SDK核心服务 -->
<service
android:name="com.igexin.sdk.PushService"
android:exported="true"
android:label="NotificationCenter"
android:process=":pushservice" >
<intent-filter>
<action android:name="com.igexin.sdk.action.service.message"/>
</intent-filter>
</service>
<service
android:name="com.igexin.sdk.PushServiceUser"
android:exported="true"
android:label="NotificationCenterUser">
<intent-filter>
<action android:name="com.igexin.sdk.action.user.message"/>
</intent-filter>
</service>
<receiver android:name="com.igexin.sdk.PushReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="com.igexin.sdk.action.refreshls" />
<!-- 以下三项为可选的action声明,可大大提高service存活率和消息到达速度 -->
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<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.igexin.sdk.PushManagerReceiver"
android:exported="false" >
<intent-filter>
<action android:name="com.igexin.sdk.action.pushmanager" />
</intent-filter>
</receiver>
<activity
android:name="com.igexin.sdk.PushActivity"
android:excludeFromRecents="true"
android:exported="false"
android:process=":pushservice"
android:taskAffinity="com.igexin.sdk.PushActivityTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name="com.igexin.sdk.GActivity"
android:excludeFromRecents="true"
android:exported="true"
android:process=":pushservice"
android:taskAffinity="com.igexin.sdk.PushActivityTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<service
android:name="com.igexin.download.DownloadService"
android:process=":pushservice" />
<receiver android:name="com.igexin.download.DownloadReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<provider
android:name="com.igexin.download.DownloadProvider"
<!-- 把"你的包名"替换为第三方应用的包名 -->
android:authorities="downloads.你的包名"
android:exported="true"
android:process=":pushservice" />
<!-- 个推SDK配置结束 -->
在Application标签外加入个推SDK运行时需要的权限:
<!-- 解决Android L上通知显示异常问题,targetSdkVersion需要设置成22 -->
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="22" />
<!-- 个推SDK权限配置开始 -->
<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.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<!-- iBeancon功能与个推3.0电子围栏功能所需要的权限为非必需的可选择权限,可以选择性配置,以便使用个推3.0电子围栏功能 -->;
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!-- 个推3.0电子围栏功能所需权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 浮动通知权限 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<!-- 自定义权限 -->
<uses-permission android:name="getui.permission.GetuiService.你的包名" />
<!--替换为第三方应用的包名-->
<permission
android:name="getui.permission.GetuiService.你的包名"
android:protectionLevel="normal" >
</permission><!--替换为第三方应用的包名-->
<!-- 个推SDK权限配置结束 -->
/参数说明
manifestPlaceholders = [
GETUI_APP_ID : "APP_ID",
GETUI_APP_KEY : "APP_KEY",
GETUI_APP_SECRET : "APPSECRET",
PACKAGE_NAME : applicationId
]
//APP_ID、APP_KEY、APP_SECRET请根据个推开发者后台申请到的应用参数进行相应替换
根据业务需要,在AndroidManifest.xml添加用于接收透传消息的BroadcastReceiver,第三方开发者需要自行实现该BroadcastReceiver,以便接收CID信息和服务端推送的透传消息。
<!-- 配置第三方Receiver -->
<!-- 此处com.getui.demo.PushDemoReceiver,需要替换成开发者自己的BroadcastReceiver文件全名-->
<receiver
android:name="com.getui.demo.PushDemoReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.igexin.sdk.action.${GETUI_APP_ID}" />//此处替换为为申请的appid才可以有透传功能并且获取到 clientid
</intent-filter>
</receiver>
在混淆文件中加入如下配置即可:
-dontwarn com.igexin.**-keep class com.igexin.**{*;}
遇到NDK与gradle的报错,将其换位gradle2.10 然后在gradle.properties加上android.useDeprecatedNdk=true
配置可选权限
该接入方式已包含个推服务所需必备权限,在此之外,您也可以在自己的AndroidManifest.xml中配置以下可选权限,以便使用个推3.0电子围栏功能。
<!-- iBeancon功能所需权限 -->;
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!-- 个推3.0电子围栏功能所需权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
导入通知栏图标
为了修改通知栏提示图标,请在res/drawable-hdpi/、res/drawable-mdpi/、res/drawable-ldpi/等各分辨率资源目录下,放置相应尺寸的push.png图片。
将 “GETUI_ANDROID_SDK\资源文件\layout”下的xml布局文件复制到app模块的layout文件夹中:
如果您的工程启用了资源精简,即在build.gradle中指定如下参数:
buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' }}
需要在res/raw中添加keep.xml,明确指定个推SDK所需的layout资源文件不能被精简,keep.xml文件:
keep.xml文件内容如下:如此可以完成layout资源保护工作。
<?xml version="1.0" encoding="utf-8"?>
<resourcesxmlns:tools="http://schemas.android.com/tools"tools:keep="@layout/getui_notification"/>
Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:53:9-55:53 to override.
1.在Manifest标签下添加 tag:xmlns:tools="http://schemas.android.com/tools"
2.在Application标签下添加tag:
tools:replace="android:value"
<applicationtools:replace="icon, label" ../>
- 即时推送--个推的集成过程整理
- 消息推送 “个推集成”
- 及时推送个推集成
- iOS集成个推推送
- dcloud -集成个推 推送消息内容
- 个推推送的数据结构:
- 推送服务 爱心推 的集成步骤
- 个推SDK的集成
- 如何集成个推sdk,并保证推送正常
- 集成个推实现推送跳转到指定页面
- 小米推送,华为推送,个推,阿里云推送集成(服务端JAVA开发)
- 个推,手机推送api的使用
- iOS个推消息推送的使用
- 推送之个推
- 个推消息推送
- 个推推送步骤
- Android 推送-个推
- 体验个推推送,感受Android推送的魅力
- 【小程序】请编写一个函数,删除一个字符串的一部分
- APUE读书笔记之一——UNIX基础知识
- 前台常用封装(二)
- HTML5_02
- Java实现定时任务的三种方式
- 即时推送--个推的集成过程整理
- swift3新路程(13)print函数
- 【NOIP模拟】我的快乐时代
- [Android | RecyclerView] OnScrollListener() 参数说明 以及一些额外参数
- 社交类APP大全
- Windows8仍存十大疑问:安全性最关键
- Android入门笔记之MarqueeText
- SpringMVC映射器和适配器
- 【备忘】【No5】微信公众平台开发入门到实战开发视频教程(Java+PHP)