点击此处下载 PUSH SDK接入文档(若公司网络下载压缩包解压异常,建议切换其他网络下载)
版本信息 | 具体说明 |
---|---|
版本号:484、版本名:3.0.0.4 | 更新内容: 1.优化代码,去掉非必要逻辑; |
版本号:483、版本名:3.0.0.3 | 更新内容: 1.修复了读取外部存储的问题; |
版本号:482、版本名:3.0.0.2 | 更新内容: 1.恢复了仅用于兼容v3.0.0.0_480以前点击回调接口:onNotificationMessageClicked; |
版本号:481、版本名:3.0.0.1 | 更新内容: 1.修复统一推送联盟接口的已知问题; |
版本号:480、版本名:3.0.0.0 | 更新内容: 1.修复安全漏洞:通知不再支持拉起非导出的Activity; 2.优化push通知点击启动慢的问题; 3.移除onNotificationMessageClicked回调,自定义参数需要统一在被拉起的Activity中通过Intent接收; |
注意:
1.vivo推送服务SDK支持的最低android版本为Android 6.0。
2.当通过”自定义/打开应用页面”方式启动应用内Activity时,该Activity在AndroidManifest.xml必须配置属性android:exported=”true”。
3.由于项目架构变动,可能会导致您在更新sdk版本时类的路径错误,重新导入类的路径即可。
一、集成sdk
1. 导入aar 包
将解压后的libs文件夹中vivopushsdk-VERSION.aar(vivopushsdk-VERSION.aar为集成的jar包名字,VERSION为版本名称)拷贝到您的工程的libs文件夹中。
在android项目app目录下的build.gradle中添加aar依赖。
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs') implementation files("libs/vivo_pushSDK_v3.0.0.4_484.aar")
}
2. 添加权限
vivo Push集成只需要配置网络权限,请在当前工程AndroidManifest.xml中的manifest节点下添加以下代码:
<!—Vivo Push需要的权限--> <uses-permission android:name="android.permission.INTERNET"/>
3. 配置appid 、api key等信息
vivo Push集成需要配置对应的appid 、app key信息,其中appid 和app key是在开发者平台中申请的,详见 vivo push 操作手册。
请在当前工程AndroidManifest.xml中的Application节点下添加以下代码(建议复制粘贴防止出错):
<!--Vivo Push开放平台中应用的appid 和api key--> <meta-data android:name="api_key" android:value="xxxxxxxx"/> <meta-data android:name="app_id" android:value="xxxx"/>
4. 自定义通知回调类
在当前工程中新建一个类 PushMessageReceiverImpl(自定义类名)继承OpenClientPushMessageReceiver 并重载实现相关方法。并在当前工程的AndroidManifest.xml文件中,添加自定义Receiver信息,代码如下:
<!--push应用定义消息receiver声明--> <receiver android:name="xxx.xxx.xxx.PushMessageReceiverImpl(自定义类名)" android:exported="false"> <intent-filter> <!--接收push消息--> <action android:name="com.vivo.pushclient.action.RECEIVE"/> </intent-filter> </receiver>
5. 注册service
接入SDK,需注册相关服务以确保正常。
请在当前工程AndroidManifest.xml中的Application节点下添加以下代码(建议复制粘贴防止出错):
<!--Vivo Push需要配置的service、activity--> <service android:name="com.vivo.push.sdk.service.CommandClientService" android:permission="com.push.permission.UPSTAGESERVICE" android:exported="true"/>
6. 配置sdk版本信息(仅通过jar包集成方式需要配置,通过aar包集成无需配置)
通过jar包方式接入SDK,需配置SDK版本信息确保正常。
请在当前工程AndroidManifest.xml中的Application节点下添加以下代码(建议复制粘贴防止出错):
<!--Vivo Push SDK的版本信息--> <meta-data android:name="sdk_version_vivo" android:value="484"/>
二、启动推送
在工程的Application中,添加以下代码,用来启动打开push开关,成功后即可在通知消息到达时收到通知。
//在当前工程入口函数,建议在Application的onCreate函数中,添加以下代码:
//初始化push PushClient.getInstance(getApplicationContext()).initialize(); // 打开push开关, 关闭为turnOffPush,详见api接入文档 PushClient.getInstance(getApplicationContext()).turnOnPush(new IPushActionListener() { @Override public void onStateChanged(int state) { // TODO: 开关状态处理, 0代表成功 } });
三、获取token
即获取regId,使用PushClient.getInstance(context).getRegId() 函数获取; 在 Api 接口 turnOnPush回调成功之后,即可获取到注册id。
四、点击通知消息
当设备接收到通知消息后,查看手机的通知栏,当点击通知时,打开通知动作分为打开App首页、打开特定Uri 网址页面、 打开用户自定义、打开应用指定页面。
注意: Sdk 3.0.0.0 以前版本的页面跳转类型打开自定义、打开指定应用页面,在Sdk 3.0.0.0及以后版本中已统一作为打开自定义页面处理。 服务端Api 字段 skipType 跳转类型分别是: 1 是打开App 首页, 2 是打开特定Url 网址页面, 4 是打开自定义页面。
打开App首页或者打开自定义页面,是通过VIVO手机通知中心跨应用启动Activity来实现,需要App保证被拉起的目标Activity exported属性默认设置为true,无权限配置,可以在点击通知时打开指定的Activity。
1. 打开App 首页
在AndroidManifest.xml文件配置主Activity。
在AndroidManifest.xml文件注册的首页Activity 中,配置 <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
在Activity 中接受数据:
开发者在首页的Activity 的onCreate 或者 onNewIntent 中,通过如下方式获取数据。
获取消息id,即messageId:
String messageId = intent.getLongExtra("vivo_push_messageId");
获取透传的自定义键值对值,如下,
遍历所有key(遍历clientCustomMap和skipContent的自定义key-value):
Bundle bundle = intent.getExtras(); if (bundle != null) { for (String key : bundle.keySet()) { if (!TextUtils.isEmpty(key)) { //注意传递的参数类型 String content = bundle.getString(key); } } }
取单个key(取clientCustomMap和skipContent特定key对应的value):
Intent intent = getIntent(); if (intent != null) { String key1 = intent.getStringExtra("key1"); int key2 = intent.getIntExtra("key2", -1); } 其中key1为用户自定义String型键值对参数值;key2为用户自定义Integer型键值对参数值。
2. 打开自定义页面
注意:原有通过onNotificationMessageClicked回调接收自定义参数的方式已经废弃,自定义参数需要统一在被拉起的Activity中通过Intent接收。
跨应用启动客户端App需要显示启动,通过Intent 携带透传参数到App,生成好对应的 Intent 参数,然后调用服务端Api 指定Intent 参数来打开自定义App页面;
生成 Intent 参数:
在Android 开发工具中,参考如下代码生成 Intent Intent intent = new Intent(this,CustomActivity.class); //Scheme协议(vpushscheme://com.vivo.push.notifysdk/detail?)开发者可以自定义 intent.setData(Uri.parse("vpushscheme://com.vivo.push.notifysdk/detail?")); //intent 中添加自定义键值对,value 为 String 型 intent.putExtra("key1", "xxx"); //intent 中添加自定义键值对,value 为 Integer 型 intent.putExtra("key2", xxx); //得到intent url 值 //示例:intent://com.vivo.pushtest/detail?#Intent;scheme=vpushscheme;component=com.vivo.pushdemo.test/com.vivo.pushsdk.CustomActivity;S.key1=xxx;i.key2=2;end String intentUri = intent.toUri(Intent.URI_INTENT_SCHEME); 备注 : 开发者以自己实际定义的为准。
注意:在AndroidStudio里生成intentUri后,开发者通过服务端Api或者在管理后台发送通知时,跳转内容(Api 对应字段 为skipContent)透传上例生成的intentUri值,然后在点击通知时打开自定义的 CustomActivity。
在AndroidManifest.xml文件注册被启动的Activity
比如被启动的自定义页面 CustomActivity,其中host、path、scheme 一定要与上面的 Intent 生成参数匹配。
注意:该属性必须设置android:exported=”true”
配置如下:
<activity android:name=".CustomActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="com.vivo.push.notifysdk" android:path="/detail" android:scheme="vpushscheme" /> </intent-filter> </activity>
注意: activity 名称用户自己定义.
在自定义的 CustomActivity 中接收数据
如下:
public class CustomActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.xxx); //获取通知消息的messagId String messageId = intent.getStringExtra("vivo_push_messageId"); //获取自定义透传参数值 Intent intent = getIntent(); if (null != intent) { String key1 = intent.getStringExtra("key1"); int kye2 = intent.getIntExtra("key2", -1); } } }
3. 打开特定Uri 网址
开发者通过Api(Api 对应字段 为skipContent)或者管理后台传自己要打开的Url 网址地址即可。
4. 恢复了仅用于兼容v3.0.0.0_480以前点击回调接口:onNotificationMessageClicked
注意Push SDKv3.0.0.2_482特性:该接口仅用于解决v3.0.0.0_480之前的版本升级Push SDK过程中发送的老版本打开自定义通知(skiptype=3)需要依赖点击回调完成跳转时使用, 新版本通知点击该点击回调是不可用的。
五、混淆说明
若需要混淆app,请在混淆文件中添加以下说明,防止SDK内容被二次混淆,自定义回调类切勿混淆。
-dontwarn com.vivo.push.** -keep class com.vivo.push.**{*; } -keep class com.vivo.vms.**{*; } -keep class xxx.xxx.xxx.PushMessageReceiverImpl{*;}
六、统一推送联盟接入
说明:请完成上述 ‘1.集成SDK’ 和 ‘2.配置信息’ 两个步骤再开始统一推送联盟的接入。
1. 打开push开关
这里只是做了相应的初始化操作,建议用户在自己应用的Application中onCreate()方法中调用turnOnPush操作。
示例代码:
VUpsManager.getInstance().turnOnPush(this, new UPSTurnCallback() { @Override public void onResult(CodeResult codeResult) { if(codeResult.getReturnCode() == 0){ Log.d(TAG, "初始化成功"); }else { Log.d(TAG, "初始化失败"); } } });
2. 注册push
注册push,获取申请的regId,即token。
示例代码:
VUpsManager.getInstance().registerToken(this, "XXX", "XXX", "XXX", new UPSRegisterCallback() { @Override public void onResult(TokenResult tokenResult) { if (tokenResult.getReturnCode() == 0) { Log.d(TAG, "注册成功 regID = " + tokenResult.getToken()); } else { &nbs自动生成app的软件p; Log.d(TAG, "注册失败"); } } });
编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/12131/
部分内容来自网络投稿,如有侵权联系立删