乐趣区

关于java:用区块链保护数字作品版权守护创作者的合法权益

“全民创作“的时代,数字自媒体有较多的变现形式,让越来越多的人参加到内容创作中。然而,哪里有原创,哪里就有剽窃!如何避免盗版,爱护创作者的合法权益,就失去国家监管机构、创作平台和创作者统一的关注。
华为和中国版权核心单干推出了 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 版权服务开源仓库地址:GitHub、Gitee

华为 HMS Core 官方论坛

解决集成问题请到 Stack Overflow

点击右上角头像右方的关注,第一工夫理解 HMS Core 最新技术~

本文由博客一文多发平台 OpenWrite 公布!

退出移动版