“全民创作“的时代,数字自媒体有较多的变现方式,让越来越多的人参与到内容创作中。但是,哪里有原创,哪里就有抄袭!如何防止盗版,保护创作者的合法权益,就得到国家监管机构、创作平台和创作者一致的关注。
华为和中国版权中心合作推出了DCI版权服务,利用区块链和大数据技术,对数字作品版权进行保护,提供DCI版权服务用户注册、DCI登记服务、DCI授权服务、DCI维权服务能力。DCI登记成功的数字作品信息(包括DCI码)将保存在区块链中,保证所有的版权信息可信、可回溯。随时随地的为每位创作者提供安心的版权保护。

效果示例

创作者在提交数字作品DCI登记后,中国版权保护中心按照一定程序将相应作品的著作权和与著作权有关的权利信息记录在案,并分配DCI码,通过华为自研区块链、大数据等技术加持,快速高效的服务方式帮助创作者摆脱繁琐的版权确权流程完成权利认证,最终实现作品版权价值最大化。

用区块链保护数字作品版权,守护创作者的合法权益

开发准备

1. 配置集成的SDK包

在应用的build.gradle文件中,dependencies内添加DCI版权服务的SDK依赖

// DCI Kit SDK
iimplementation 'com.huawei.hms:dci:3.0.1.300'

2. 配置AndroidManifest.xml

打开main文件夹中的AndroidManifest.xml文件,可以根据场景和使用需要,配置读取和写入手机存储以及相机权限,在<application>前添加

<!-- 往sdcard中写入数据的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!—网络权限 -->
<uses-permission 
android:name="android.permission.INTERNET" />

开发步骤

1. 初始化DCI SDK·

在Application的onCreate()方法中,对DCI SDK进行初始化操作。

@Override
public void onCreate() {
    super.onCreate();
    // Init DCI Kit
    HwDciPublicClient.initApplication(this);
}

2. 非DCI版权服务用户要先进行用户注册。

// 通过华为帐号服务获取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();
    }
});

// 设置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);

// DCI版权服务用户注册完成后在页面的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处理失败的逻辑
        }
    }

3. 传入作品进行DCI登记

调用HwDciPublicClient的applyDciCode接口,传入作品相关信息进行数字作品进行DCI登记。

// Initializing the Rebuild Engine
ParamsInfoEntity paramsInfoEntity = new ParamsInfoEntity();
paramsInfoEntity.setDciUid(dciUid);
paramsInfoEntity.setHmsAppId(hmsAppId);
paramsInfoEntity.setHmsOpenId(hmsOpenId);
paramsInfoEntity.setHmsToken(hmsToken);

// 获取数字作品本地保存的路径
String imageFilePath = imageFile.getAbsolutePath();
// 获取当前定位所在的城市名
String local = "北京市";
// 获取数字作品创作时间,Unix时间,这里以当前时间为例
long currentTime = System.currentTimeMillis();
// 调用接口方法
HwDciPublicClient.applyDciCode(paramsInfoEntity, imageFilePath,local,currentTime, new HwDciClientCallBack<String>() {
    @Override
    public void onSuccess(String workId) {
        // 提交DCI登记成功,本地保存workId,用于查询DCI登记结果入参。
    }

    @Override
    public void onFail(int code, String msg) {
        // 提交DCI登记失败。
    }
});

4. 查询DCI登记结果。

调用HwDciPublicClient的queryWorkDciInfo接口,根据返回的状态码判断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<WorkDciInfoEntity>() {
    @Override
    public void onSuccess(WorkDciInfoEntity result) {
        if (result == null) {
            return;
        }
        // 根据返回的状态码判断DCI登记结果,0代表处理中,1代表成功,2代表失败
        if (result.getRegistrationStatus() == 1) {
            // 查询成功,DCI登记成功,获取DCI码。
            mDciCode = result.getDciCode();
        }else if (result.getRegistrationStatus() == 0) {
            // 查询成功,DCI登记正在处理中。
        }else {
            // 查询成功,DCI登记失败。获取DCI登记失败原因。
            String message = result.getMessage()
        }
    }
    @Override
    public void onFail(int code, String msg) {
        // 查询失败。
    }});

5. 为数字作品添加DCI标。

调用HwDciPublicClient的addDciWatermark接口,为DCI登记成功的作品添加DCI标,作为数字作品版权确权标识

// 传入需要添加DCI标的数字作品的本地路径
String imageFilePath = imageFile.getAbsolutePath();
HwDciPublicClient.addDciWatermark(imageFilePath, new HwDciClientCallBack<String>() {
    @Override
    public void onSuccess(String imageBase64String) {
        // DCI标志添加成功,返回图片base64字符串
    }

    @Override
    public void onFail(int code, String msg) {
        // 添加失败
    }
});

了解更多相关内容

访问华为DCI版权服务服务官网

获取华为DCI版权服务开发指导文档

华为DCI版权服务开源仓库地址:GitHubGitee

华为HMS Core官方论坛

解决集成问题请到Stack Overflow

点击右上角头像右方的关注,第一时间了解HMS Core最新技术~