个推是一个非常优秀的推送平台,在项目中我使用了个推,并将集成个推的过程简要记载,希望能帮助有需要的同学。
1. 注册个推账号,申请个推应用,获取个推的appid等信息。
2. 添加Maven库地址
在以项目名为命名的顶层build.gradle文件中,添加个推maven库地址
//Maven URL地址
maven {
url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/"
}
3. 配置依赖库
compile 'com.getui:sdk:2.12.3.0'
4. 配置so库
目前个推SDK支持armeabi、armeabi-v7a、arm64-v8a、mips、mips64、x86、x86_64这几种 CPU 架构,请根据项目情况指定所需的架构。
在项目根目录下的gradle.properties文件中配置useDeprecatedNdk参数
在app/build.gradle文件中的android.defaultConfig下指定所需的 CPU 架构
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86","arm64-v8a","mips","mips64"
}
5.配置个推参数
在app/build.gradle文件中的android.defaultConfig下添加manifestPlaceholders,配置个推相关的应用参数
manifestPlaceholders = [
GETUI_APP_ID : "*************",
GETUI_APP_KEY : "*************",
GETUI_APP_SECRET : "*************"
]
6.向后台注册个人的账号
向后台注册个人账号
获取账号:
private fun phoneInfo(): String{
val phoneNmuber = et!!.text.toString()
json = JSONObject()
//获取每个用户唯一的clientid,用来发送给服务器
val clientId: String? = PushManager.getInstance().getClientid(this)
try {
json.put("customerId", phoneNmuber)
json.put("deviceId", clientId)
json.put("supplierId", "201")
} catch (e: JSONException) {
e.printStackTrace()
}
sp = getSharedPreferences("info", Context.MODE_PRIVATE)
val ed = sp.edit()
ed.putString("deviceId", clientId)
ed.commit()
return sp.toString()
}
提交账号:
OkHttpUtils
.postString()
.url(NetApi.url)
.content(json.toString())
.mediaType(MediaType.parse("application/json; charset=utf-8"))
.build()
.execute(MyStringCallback())
MyStringCallback()的处理,见我上一篇文章《OkhttpUtils向后台传送Json数据》
7. 获取点击事件,向后台发送回执
override fun onReceiveMessageData(context: Context, msg: GTTransmitMessage) {
val appid = msg.appid
val taskid = msg.taskId
val messageid = msg.messageId
val payload = msg.payload
val pkg = msg.pkgName
val cid = msg.clientId
// 第三方回执调用接口,actionid范围为90000-90999,可根据业务场景执行
val result = PushManager.getInstance().sendFeedbackMessage(context, taskid, messageid, 90001)
Log.d(GTIntentService.TAG, "call sendFeedbackMessage = " + if (result) "success" else "failed")
Log.d(GTIntentService.TAG, "onReceiveMessageData -> " + "appid = " + appid + "\ntaskid = " + taskid + "\nmessageid = " + messageid + "\npkg = " + pkg
+ "\ncid = " + cid)
if (payload == null) {
Log.e(GTIntentService.TAG, "receiver payload = null")
} else {
data = String(payload)
Log.d(GTIntentService.TAG, "receiver payload = $data")
// 测试消息为了观察数据变化
if (data == resources.getString(R.string.push_transmission_data)) {
data = "$data-$cnt"
cnt++
}
sendMessage(data.toString())
}
val sp = getSharedPreferences("info", Context.MODE_PRIVATE)
val deviceId = sp.getString("deviceId", clientid)
val jo = JSONObject(data)
val msgId = jo.getString("messageId")
Log.e("sdsdf","JSONObject(data)>>" + JSONObject(data))
Log.e("sdsdf","data>>")
json = JSONObject()
try {
json.put("deviceId", deviceId)
json.put("msgId", msgId)
} catch (e: JSONException) {
e.printStackTrace()
}
OkHttpUtils
.postString()
.url(NetApi.url_Send)
.content(json.toString())
.mediaType(MediaType.parse("application/json; charset=utf-8"))
.build()
.execute(MyStringCallback())
}
8.配置manifest权限
上述接入方式已包含个推服务所需的所有必备权限。在此之外,您还可以配置以下可选权限,以便使用个推3.0提供的电子围栏功能。请在AndroidManifest.xml的<manifest>根标签下添加如下配置:
<!-- 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" />
完成上述步骤,即可完成使用个推向后台注册账号,并获取处理点击事件的功能。