OPPO开放平台 应用评论调起能力接入指南
接入场景说明
接入OPPO软件商店的评论功能后,可以直接在本应用当前页面调起评论窗口,进行评分和评论,无须跳转至软件商店内。
效果示例:
功能优势
1、评分和评论会影响您的App在软件商店的排名,优质的评论以及较高的评分,有助于提升App在应用商店的排名。
2、优质的评论以及较高的评分,有助于激发用户下载的欲望,能有效提高自然下载量。
3、一键调起商店评论页面,降低用户评论成本,帮助您更方便高效地收集用户评论
跳转协议
oaps://mk/developer/comment?pkg={callerPkg}
参数说明:
pkg:要拉起评论的应用的包名,必须和调用商店的应用是同一个包名,否则无法拉起商店评论。
示例(游戏中心拉起其在商店的评论页的协议链接):
oaps://mk/developer/comment?pkg=com.nearme.gamecente
支持评论的商店版本
软件商店的版本号(versionCode) >= 84000。
详细使用方法
Android R(11) 应用包信息可见性适配
Android 从 R(11) 开始对获取应用包信息做了限制,官方适配文档链接
1)https://developer.android.com/preview/privacy/package-visibility#common-interactions
2)https://developer.android.com/training/basics/intents/package-visibility
兼容方案:(2个方式任意选择一个,推荐方案一)。
方式一(推荐):
在R上 需要在manifest添加标签(该方式,只获取软件商店信息)
<manifest package="com.example.xxxxx">
...
<queries>
<package android:name="com.heytap.market"/>
</queries>
...
</manifest>
说明:
标签可能会编译不过,出现此问题请升级Android Studio 和 Gradle 插件:
1)Android Studio 3.6.1 或更高版本
2)最新版本的 Android Gradle 插件
方式二:
在manifest添加下申请如下权限:
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
说明:
使用这种方式,后续Android版本可能会收紧这个权限的申请,存在被禁用风险。
代码调用
强调:为了使商店评论页面有盖在当前应用之上的效果,必须满足以下条件
1)Context 必须使用 Activity 对象。
2)Intent 不能使用 Intent.FLAG_ACTIVITY_NEW_TASK 这个Flag。
private final static String PKG_MK_HEYTAP = "com.heytap.market";//Q之后的软件商店包名
private final static String PKG_MK_OPPO = "com.oppo.market";//Q之前的软件商店包名
private final static String COMMENT_DEEPLINK_PREFIX = "oaps://mk/developer/comment?pkg=";
private final static int SUPPORT_MK_VERSION = 84000; // 支持评论功能的软件商店版本
/**
* 拉起评论页面。
*/
public static boolean jumpToComment(Activity context) {
// 此处一定要传入调用方自己的包名,不能给其他应用拉起评论页。
String url = COMMENT_DEEPLINK_PREFIX + context.getPackageName();
// 优先判断heytap包
if (getVersionCode(context, PKG_MK_HEYTAP) >= SUPPORT_MK_VERSION) {
return jumpApp(context, Uri.parse(url), PKG_MK_HEYTAP);
}
if (getVersionCode(context, PKG_MK_OPPO) >= SUPPORT_MK_VERSION) {
return jumpApp(context, Uri.parse(url), PKG_MK_OPPO);
}
return false;
}
/**
* 获取目标app版本号~
*
* @param context
* @param packageName
* @return 返回版本号
*/
private static long getVersionCode(Activity context, String packageName) {
long versionCode = -1;
try {
PackageInfo info = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_META_DATA);
if (info != null) {
versionCode = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P ? info.getLongVersionCode() : info.versionCode;
}
} catch (PackageManager.NameNotFoundException e) {
}
return versionCode;
}
private static boolean jumpApp(Activity context, Uri uri, String targetPkgName) {
try {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setPackage(targetPkgName);
intent.setData(uri);
// 建议采用startActivityForResult 方法启动商店页面,requestCode由调用方自定义且必须大于0,软件商店不关注
context.startActivityForResult(intent, 100);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
建议:
1)使用Activity做为context,并且调用Activity.startActivityForResult方法拉起商店,这样更安全。
2)如果使用startActivityForResult方法拉起商店,requestCode >0 并且 intent 不能设置Intent.FLAG_ACTIVITY_NEW_TASK这个flag。
编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/10870/
部分内容来自网络投稿,如有侵权联系立删