DCI版权服务(Digital Copyright Identifier Kit,以下简称"DCI Kit")是由华为和中国版权保护中心(即数字版权唯一标识符管理机构)合作,按照《中华人民共和国著作权法》、"数字版权唯一标识符"标准及相关规定,利用区块链、大数据、人工智能等技术,对数字作品版权进行保护,提供DCI版权服务用户注册、DCI登记服务、DCI授权服务DCI维权服务等能力。
DCI版权服务用户发起DCI登记,利用大数据等技术对数字作品信息和权属信息进行校验。DCI登记成功后,可获得由中国版权保护中心分配的数字版权唯一标识符(DCI)。
DCI版权服务会将DCI登记成功的作品信息和版权权属确认信息保存在区块链中,保证所有的版权信息可信、可回溯。
为此,您需要:
在这个Codelabs中,您将使用已经创建好的Demo Project实现对DCI SDK的集成,通过Demo Project您可以体验到:
Android基础开发能力。
集成DCI Kit能力,您需要完成以下准备工作:
由于DCI SDK需要依赖华为帐号服务,请在"API管理"中打开Account Kit服务开关。


至此,已经为创建的应用开通了"帐号"服务。
具体操作步骤请参见打开服务开关。



dependencies {
// 添加DCI SDK依赖
implementation 'com.huawei.hms:dci:{version}'
}
dci为华为DCI版权服务,{version}替换为DCI SDK的最新版本号,具体版本号请参见版本更新说明中的最新版本号。例如:implementation ‘com.huawei.hms:dci:x.x.x.xxx'。
开发者编译APK前需要配置不要混淆HMS Core SDK,避免功能异常。
Android Studio开发环境里的配置文件是"proguard-rules.pro"。
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.huawei.hianalytics.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hms.**{*;}
"R.string.hms*",
"R.string.connect_server_fail_prompt_toast",
"R.string.getting_message_fail_prompt_toast",
"R.string.no_available_network_prompt_toast",
"R.string.third_app_*",
"R.string.upsdk_*",
"R.layout.hms*",
"R.layout.upsdk_*",
"R.drawable.upsdk*",
"R.color.upsdk*",
"R.dimen.upsdk*",
"R.style.upsdk*",
"R.string.agc*"
在上一小节中,您已成功集成了DCI Kit,本小节您将尝试编写一个Demo,学会如何使用DCI Kit的DCI登记。

// 初始化DCI Kit
@Override
public void onCreate() {
super.onCreate();
// 调用方法进行初始化操作
HwDciPublicClient.initApplication(this);
}
// 通过华为帐号服务获取OpenId和AccessToken
AccountAuthParams authParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM)
.setAccessToken()
.setProfile()
.createParams();
AccountAuthService service = AccountAuthManager.getService(activity, authParams);
Task<AuthAccount> mTask = service.silentSignIn();
mTask.addOnSuccessListener(new OnSuccessListener<AuthAccount() {
@Override
public void onSuccess(AuthAccount authAccount) {
// 获取华为帐号 OpenId
String hmsOpenId = authAccount.getOpenId();
// 获取华为帐号 AccessToken
String hmsAccessToken= authAccount.getAccessToken();
}
});
b) 获取到华为帐号的OpenId和AccessToken数据后,就可以调用DCI SDK的接口方法进行DCI版权服务用户注册。代码示例如下:// 设置SDK方法入参
ParamsInfoEntity paramsInfoEntity = new ParamsInfoEntity();
// 传入华为开发者联盟AppGallery Connect申请的AppID
paramsInfoEntity.setHmsAppId(hmsAppId);
// 传入华为帐号的OpenID
paramsInfoEntity.setHmsOpenId(hmsOpenId);
// hmsPushToken 为集成的华为push功能所提供的token,若不集成推送功能则不传此值
paramsInfoEntity.setHmsPushToken(hmsPushToken);
// 传入华为帐号的AccessToken
paramsInfoEntity.setHmsToken(hmsAccessToken);
// 自定义返回code值,用于接收DCI版权服务用户注册结果
int myRequestCode = 1;
// 启动DCI版权服务用户注册界面
HwDciPublicClient.registerDciAccount(activity,paramsInfoEntity ,myRequestCode);
// 注册完成后在页面的onActivityResult中获取DCI版权服务用户注册结果。
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode != myRequestCode || resultCode != RESULT_OK || data == null) {
return;
}
int code = data.getIntExtra(HwDciConstant.DCI_REGISTER_RESULT_CODE, 0);
if (code == 200) {
// DCI版权服务用户注册成功 获取返回的DCI UID
AccountInfoEntity accountInfoEntity = data.getParcelableExtra(HwDciConstant.DCI_ACCOUNT_INFO_KEY);
String dciUid = accountInfoEntity.getUserId();
} else {
// DCI版权服务用户注册失败,根据code处理失败的逻辑
}
}
ParamsInfoEntity paramsInfoEntity = new ParamsInfoEntity();
paramsInfoEntity.setDciUid(dciUid);
paramsInfoEntity.setHmsAppId(hmsAppId);
paramsInfoEntity.setHmsOpenId(hmsOpenId);
paramsInfoEntity.setHmsToken(hmsToken);
// 获取数字作品拥有可读写权限的uri
Uri imageUri = intent.getData();
// 获取当前定位所在的城市名
String local = "北京市";
// 获取数字作品创作时间,Unix时间,这里以当前时间为例
long currentTime = System.currentTimeMillis();
// 调用接口方法
HwDciPublicClient.applyDciCode(paramsInfoEntity, imageUri, local,currentTime, new HwDciClientCallBack<String>() {
@Override
public void onSuccess(String workId) {
// 提交DCI登记申请成功,本地保存workId用于查询DCI登记结果入参。
}
@Override
public void onFail(int code, String msg) {
// 提交DCI登记请求失败
}
});
ParamsInfoEntity paramsInfoEntity = new ParamsInfoEntity();
paramsInfoEntity.setDciUid(dciUid);
paramsInfoEntity.setHmsAppId(hmsAppId);
paramsInfoEntity.setHmsOpenId(hmsOpenId);
paramsInfoEntity.setHmsToken(hmsToken);
paramsInfoEntity.setWorkId(workId);
HwDciPublicClient.queryWorkDciInfo(paramsInfoEntity, new HwDciClientCallBack() {
@Override
public void onSuccess(WorkDciInfoEntity result) {
// 根据返回的状态码判断DCI登记结果,0代表处理中,1代表成功,2代表失败
if (result.getRegistrationStatus() == 1) {
// 查询成功,DCI登记成功,获取数字版权唯一标识符(DCI)。
mDciCode = result.getDciCode();
}else if (result.getRegistrationStatus() == 0) {
//查询成功,DCI登记正在处理中。
}else if (result.getRegistrationStatus() == 2){
//查询成功,DCI登记失败。获取DCI登记失败原因。
String message = result.getMessage()
}
}
@Override
public void onFail(int code, String msg) {
// 查询失败。
}
});
干得好,您已经成功完成了codelab并学到了:
您可以阅读下面链接,了解更多相关的信息:
相关文档
本Codelab中所用Demo源码下载地址如下: