最近项目中要用到推送,之前一直用的是xmpp,这次公司指明要用百度云推送,以为几分钟就能搞定的事,结果吃在了以前用xmpp的亏,进入了一个误区,以为只要启动就ok了,可是事实却总是报,找不到相关类,静下心来看官方文档,发现网站的引导做的不是很好,甚至有点乱,总是找不到想到的网页,这里简单的说下流程:
首先注册一个百度账号,这里就不多说了。然后登陆,点击右上方的管理控制台选择开发者服务管理,见下图
会进入下面的界面
点击创建工程见下界面
随便输入一个应用名称,点击创建会看到下面的界面
点击推送设置
接下来输入你的应用包名,点保存
现在点击右上角的APIKey,就可以复制你的API key了
下面简单介绍一下配置和代码,官方文档,和demo已经足够了,这里就说一下需要注意的地方
接下来是代码的调用
将这两个文件拷贝到你的主包下,修改使其没错,
if (!hasBind(getApplicationContext())) {
// !! 请将AndroidManifest.xml 104行处 api_key 字段值修改为自己的 api_key 方可使用 !!
// !! ATTENTION:You need to modify the value of api_key to your own at row 104 in AndroidManifest.xml to use this Demo !!
PushManager.startWork(getApplicationContext(),
PushConstants.LOGIN_TYPE_API_KEY,
getMetaValue(MainActivity.this, "api_key"));
// Push: 如果想基于地理位置推送,可以打开支持地理位置的推送的开关
// PushManager.enableLbs(getApplicationContext());
}
这段代码是启动推送的,放到oncreate方法中
下面是几个关联的方法
// 用share preference来实现是否绑定的开关。在ionBind且成功时设置true,unBind且成功时设置false
public static boolean hasBind(Context context) {
SharedPreferences sp = PreferenceManager
.getDefaultSharedPreferences(context);
String flag = sp.getString("bind_flag", "");
if ("ok".equalsIgnoreCase(flag)) {
return true;
}
return false;
}
// 获取ApiKey
public static String getMetaValue(Context context, String metaKey) {
Bundle metaData = null;
String apiKey = null;
if (context == null || metaKey == null) {
return null;
}
try {
ApplicationInfo ai = context.getPackageManager()
.getApplicationInfo(context.getPackageName(),
PackageManager.GET_META_DATA);
if (null != ai) {
metaData = ai.metaData;
}
if (null != metaData) {
apiKey = metaData.getString(metaKey);
}
} catch (NameNotFoundException e) {
}
return apiKey;
}
现在可以测试一下了
还是点击点击开发者服务管理,会看到下面界面
运行你的应用后,点击通知,发送消息,验证是否成功