Oppo推送服务,也是在Oppo手机中使用的比较多。而且现在Oppo和Vivo两款手机最早提出美颜功能,所以这两款手机在市场上的占有率还是比较高的。
Oppo推送目前已经开发注册,Vivo目前只对部分应用开发了推送服务功能。所以目前部分应用无法使用vivo推送的暂时不要着急,后面都会有的。
OPPO推送
首先还是先去Oppo开放平台注册自己的账号和添加应用,然后获取AppKey和AppId等信息,这些操作就不再一一叙述,具体查看官网
这里同时将Oppo平台使用指南的官方地址写出来,其实就是如何使用控制台,后面会针对几个特殊的内容,比如传递自定义数据等截图具体分析。使用指南
OPPO推送SDK下载
Oppo为我们提供了下载地址,其中还包括一个官方提供的demo,不过这个demo我没有仔细看过。希望以后有时间可以将demo仔细的看一遍
OPPO推送集成
将下载的SDK中Oppo推送的jar包拷贝出来,直接放在libs文件夹中。
在执行Oppo推送之前,最好先判断当手机是否是Oppo手机,判断使用下面的内容
if(android.os.Build.BRAND.toLowerCase().contains("oppo")){
initOppoPush();
}
然后在Application中执行Oppo推送初始化
/**
* 初始化OPPO推送
*/
protected void initOppoPush() {
//在执行Oppo推送注册之前,需要先判断当前平台是否支持Oppo推送
if (PushManager.isSupportPush(this)) {
PushManager.getInstance().register(this, OPPO_APPID, OPPO_APPKEY, new PushAdapter() {
@Override
public void onRegister(int i, String s) {
if (i == ErrorCode.SUCCESS) {
//注册成功
Log.e("NPL", "注册成功,registerId=" + s);
} else {
//注册失败
Log.e("NPL", "注册失败");
}
}
});
}
}
到这里基本的操作已经完成了,当通过Oppo控制台推送一些通知时,可以通过点击启动App。但是如果我们想要传递的内容不同而执行不同的操作,例如可以打开web页面,可以跳转到不同的Activity,那么这是我们需要另外一Activity。这个Activity没有实际的含义,只是起到一个承接的作用,即当点击通知时,获取传递的数据,然后根据不同的数据跳转到不同的页面。
需要在Manifest文件中添加这个Activity的声明,具体声明代码如下:
<activity
android:name=".OPPOPushMessageActivity"
android:configChanges="keyboardHidden|orientation"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="com.paulniu.mypush.oppopush" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
其中的
<action android:name="com.paulniu.mypush.oppopush" />
是当我们发送应用内页时的标识
如图所示:
2019年2月15日15:10:13 OPPO官网对这个地方的样式做了调整
1.如果传递的是Intent Action ,如图
则在使用的时候需要在Manifest文件中设置如图
2.如果使用的是Activity,如图
这个就不多说了
3.如果使用的是Scheme,如图
那么在Manifest文件中使用的应该是如下所示
并且当我们选择插入的键值,就需要在客户端获取到并且解析。那么就需要在OPPOPushMessageActivity中解析。
public class OPPOPushMessageActivity extends AppCompatActivity {
public String type = "";
public String url = "";
public String innerUrl = "";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 取参数值
if (getIntent().getExtras() != null) {
// 取参数值
Bundle bundle = getIntent().getExtras();
Set<String> set = bundle.keySet();
HashMap<String, String> hm = new HashMap<>();
if (set != null) {
for (String key : set) {
hm.put(key, bundle.getString(key));
}
}
Log.e("NPL", "hm的值是:" + hm.toString());
if (hm.size() > 0) {
//解析当前的HashMap对象,可以获取具体的数据
if (set.contains("type")) {
type = hm.get("type");
}
if (set.contains("url")) {
url = hm.get("url");
}
if (set.contains("innerUrl")) {
innerUrl = hm.get("innerUrl");
}
//根据当前type类型去执行不同的操作
}
}
}
}
vivo推送
vivo推送官网地址如下: https://dev.vivo.com.cn/home
由于vivo推送目前还没有全面开发,所以这里使用的测试版本
对于vivo的推送平台的使用,这里贴出官网地址:vivo推送平台使用
vivo推送SDK下载:下载地址 这里面包括API文档,demo,SDK等内容
该说不说,还是vivo提供的文档最好,各种清晰,方便操作,对于我这样的小白很适用
vivo推送集成
SDK
首先将SDK拷贝出来放到libs文件夹中,然后重新编译
声明
在Manifest文件中对于Vivo推送需要添加部分权限和声明
权限:
<!--vivo推送所需要的权限-->
<uses-permission android:name="android.permission.INTERNET" />
声明:
<!--vivo推送开始-->
<!--vivo推送配置项-->
<meta-data
android:name="com.vivo.push.api_key"
android:value="xxxxxxxxxxxxx" />
<meta-data
android:name="com.vivo.push.app_id"
android:value="xxxxxxx" />
<!--推送服务需要配置的 service、activity-->
<service
android:name="com.vivo.push.sdk.service.CommandClientService"
android:exported="true" />
<activity
android:name="com.vivo.push.sdk.LinkProxyClientActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!--vivo推送结束-->
之后需要在Application中执行Vivo推送的注册
/**
* 初始化vivo推送
*/
protected void initVivoPush() {
//初始化vivo推送
PushClient.getInstance(this).initialize();
//并且打开推送服务
PushClient.getInstance(this).turnOnPush(new IPushActionListener() {
@Override
public void onStateChanged(int i) {
if (i == 0) {
Log.e("NPL", "打开推送服务成功");
} else {
Log.e("NPL", "打开推送服务失败");
}
}
});
}
这样就完成了基本操作。但如果需要相应点击事件,则需要创建一个广播接收器,并在里面实现相应的方法
广播接收器的注册:
<receiver android:name=".IVivoPushMessageReceiver">
<intent-filter>
<!-- 接收push消息 -->
<action android:name="com.vivo.pushclient.action.RECEIVE" />
</intent-filter>
</receiver>
广播接收器的代码实现:
public class IVivoPushMessageReceiver extends OpenClientPushMessageReceiver {
@Override
public void onNotificationMessageClicked(Context context, UPSNotificationMessage upsNotificationMessage) {
long msgId;
String customeContent = "";
if (upsNotificationMessage != null) {
msgId = upsNotificationMessage.getMsgId();
customeContent = upsNotificationMessage.getSkipContent();
Log.e("NPL", "获取通知内容如下:msgId = " + msgId + ";customeContent=" + customeContent);
}
}
@Override
public void onReceiveRegId(Context context, String s) {
if (TextUtils.isEmpty(s)) {
//获取regId失败
Log.e("NPL", "获取RegId失败");
} else {
Log.e("NPL", "获取RegId成功,regid = " + s);
}
}
}
这样就实现了vivo的推送。