简介

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能力,您需要完成以下准备工作:

具体操作,请按照HUAWEI HMS Core集成准备中详细说明来完成。

由于DCI SDK需要依赖华为帐号服务,请在"API管理"中打开Account Kit服务开关。

  1. 华为开发者联盟AppGallery Connect中选择"我的项目",在项目列表中选择创建的应用,在"项目设置"页面中选择"API管理"。
  2. 打开"华为帐号"服务开关。

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

添加当前应用的AppGallery Connect配置文件

  1. 打开AppGallery Connect应用管理中之前创建的应用,并选择"项目设置 > 常规",点击"默认数据处理位置"的设置按钮。
  2. 下载应用中的"agconnect-services.json"。
  3. 将"agconnect-services.json"文件移至Android Studio开发工程应用模块的根目录。

添加编译依赖

  1. 打开应用级的build.gradle文件。
  2. 在"dependencies"中添加编译依赖。
    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"。

  1. 加入混淆配置。
    -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.**{*;}
  2. 如果您使用了AndResGuard,需要在混淆配置文件中加入AndResGuard允许清单。
    "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登记。

  1. 获取APP ID,用于SDK调用传入参数。
    登录AppGallery Connect网站,在"我的项目 > 项目设置 > 常规"页面的"应用"区域获取APP ID。
  2. 您可以参见基于OAuth 2.0开放鉴权客户端模式获取AccessToken。
  3. 在Application的onCreate方法中初始化DCI Kit。
    // 初始化DCI Kit @Override public void onCreate() { super.onCreate(); // 调用方法进行初始化操作 HwDciPublicClient.initApplication(this); }
  4. 注册DCI版权服务用户。
    a) 先登录华为帐号。获取华为帐号的OpenId和AccessToken。
    代码示例如下:
    // 通过华为帐号服务获取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处理失败的逻辑 } }
  5. DCI版权服务用户注册成功之后,下面就可以对用户的数字作品进行DCI登记了。示例代码如下:
    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&lt;String&gt;() { @Override public void onSuccess(String workId) { // 提交DCI登记申请成功,本地保存workId用于查询DCI登记结果入参。 } @Override public void onFail(int code, String msg) { // 提交DCI登记请求失败 } });
  6. 数字作品申请DCI登记之后,需要等待审核通过才能确定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源码下载地址如下:

源码下载

Code copied