CaaS Engine是华为依托畅连业务通信能力,面向应用开发者提供的开放接口,CaaS Engine基于开发者应用自身的联系人(好友)等社交体系,可以帮助开发者快速实现应用内音视频通话服务。

您将建立什么

在这个Codelab中,你将创建Demo Project,并将CaaS Engine的SDK集成到Demo Project中,以及完成CaaS Engine服务的整体流程搭建。

您将会学到什么

硬件要求

软件要求

需要的知识点

集成CaaS Engine能力,需要完成以下准备工作:

具体操作,请按照《开发指南》中“应用开发”的详细说明来完成。

1. 集成SDK。

向项目中的build.gradle中配置仓库:

buildscript { repositories { google() jcenter() maven {url 'https://developer.huawei.com/repo/'} } } allprojects { repositories { maven {url 'https://developer.huawei.com/repo/'} google() jcenter() } }

在工程APP目录中的build.gradle中添加如下依赖:

repositories { flatDir { dirs 'libs' } } dependencies { implementation group: 'com.huawei.caaskit', name: 'caaskitlite', version: '1.0.1.400', ext: 'aar' }

点击同步工程按钮,进行工程同步,如下图所示:

同步成功后,如下图所示:

2. 添加appid信息。

在自身应用AndroidManifest.xml中添加开发者联盟创建应用时生成的appid信息,name为"com.huawei.hms.client.appid",value为"appid=*",*用自己注册的appid。权限申请,请依照《开发指南》中"开发准备"的详细说明来完成。

3. 初始化。

CaasKitHelper.java

public class CaasKitHelper { private static final String TAG = "CaasKitHelper"; private static com.huawei.caaskitdemo.caaskit.CaasKitHelper mCaasKitHelper; private HwCaasServiceManager mHwCaasServiceManager; private HwCaasHandler mHwCaasHandler; private Context mContext; private boolean mIsCaasKitInit; private CaasKitHelper() { mContext = CaasKitApplication.getContext(); } public static com.huawei.caaskitdemo.caaskit.CaasKitHelper getInstance() { if (mCaasKitHelper == null) { synchronized (com.huawei.caaskitdemo.caaskit.CaasKitHelper.class) { if (mCaasKitHelper == null) { mCaasKitHelper = new CaasKitHelper(); } } } return mCaasKitHelper; } public void caasKitInit(HwCaasServiceCallBack callback) { Log.d(TAG, "caasKitInit."); if (!mIsCaasKitInit) { /** Initialize mHwCaasServiceManager instance. */ mHwCaasServiceManager = HwCaasServiceManager.init(); /** Initialize HwCaasHandler instance through handlerType. */ mHwCaasServiceManager.initHandler(mContext, HwCaasUtils.NORMAL_CALL_TYPE, callback); mIsCaasKitInit = true; } } public void setHwCaasHandler(HwCaasHandler handler) { Log.d(TAG, "setHwCaasHandler."); mHwCaasHandler = handler; } public void queryHiCallAbility(String phoneNumber) { Log.d(TAG, "queryHiCallAbility."); /** The format for querying phoneNumber after Sha256 encryption is required must be a number with a country code Example: +861320750xxxx */ String phoneNumberSha256 = Sha256Util.encryptNumber(phoneNumber); if (mHwCaasHandler != null) { mHwCaasHandler.queryCallAbility(phoneNumberSha256, HwCaasUtils.CallAbilityType.NORMAL_CALL); } } public void setCallAbilityCallBack(HwCallAbilityCallBack callback) { Log.d(TAG, "setCallAbilityCallBack."); if (mHwCaasHandler != null) { mHwCaasHandler.setCallAbilityCallBack(callback); } } public void setMakeCallCallBack(HwMakeCallCallBack callback) { Log.d(TAG, "setMakeCallCallBack."); if (mHwCaasHandler != null) { mHwCaasHandler.setMakeCallCallBack(callback); } } }

在代码合适的位置进行调用:
CaasKitActivity.java

public class CaasKitActivity extends AppCompatActivity { private static final String TAG = "CaasKitActivity"; private static final int PHONE_NOT_SUPPORT_HICALL = 3002; ... private HwCaasServiceCallBack mCallBack = new HwCaasServiceCallBack() { @Override public void initSuccess(HwCaasHandler handler) { Log.i(TAG, "HwCaasServiceCallBack:initSuccess."); /** Callback after successful initialization of HwCaasHandler. */ CaasKitHelper.getInstance().setHwCaasHandler(handler); CaasKitHelper.getInstance().setCallAbilityCallBack(mAbilityCallBack); CaasKitHelper.getInstance().setMakeCallCallBack(new HwMakeCallCallBack() { @Override public void makeCallResult(String number, int retCode) { Log.d(TAG, "number: " + number + " retCode: " + retCode); } }); } @Override public void initFail(int retCode) { /** Callback if init Handler fail. */ Log.i(TAG, "HwCaasServiceCallBack:initFail:retCode: " + retCode); ...//close the call entry toast("HwCaasServiceCallBack initFail"); } @Override public void releaseSuccess() { /** Callback after successful release of mHwCaasServiceManager. */ Log.i(TAG, "HwCaasServiceCallBack:releaseSuccess"); CaasKitHelper.getInstance().setHwCaasHandler(null); } }; private HwCallAbilityCallBack mAbilityCallBack = new HwCallAbilityCallBack() { @Override public void callAbilityResult(String phoneNumberSha256, int retCode) { Log.i(TAG, "HwCallAbilityCallBack:phoneNumberSha256:" + phoneNumberSha256 + " retCode:" + retCode); if (retCode == 0) { ...//Both audio and video calls are supported. The UI display is changed to display the audio and video call entry. } else if (retCode == 1) { ...//Only audio calls are supported. The UI display is changed, and only the audio call entry is displayed. } else if (retCode == PHONE_NOT_SUPPORT_HICALL) { ...//Audio and video calls are not supported. Close the call entrys. } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_caaskitquickcall); ... CaasKitHelper.getInstance().caasKitInit(mCallBack); } }

4. 查询通话能力。

CaasKitHelper.java

public class CaasKitHelper { ... public void queryHiCallAbility(String phoneNumber) { Log.d(TAG, "queryHiCallAbility."); /** The format for querying phoneNumber after Sha256 encryption is required must be a number with a country code Example: +861320750xxxx */ String phoneNumberSha256 = Sha256Util.encryptNumber(phoneNumber); if (mHwCaasHandler != null) { mHwCaasHandler.queryCallAbility(phoneNumberSha256, HwCaasUtils.CallAbilityType.NORMAL_CALL); } } ... }

在合适的地方进行调用:
CaasKitActivity.java

public class CaasKitActivity extends AppCompatActivity { ... private Button mStartQuery; ... private void initData() { ... mStartQuery.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { CaasKitHelper.getInstance().queryHiCallAbility(mPhoneNumber.getText().toString()); } }); ... } }

5. 音频电话和视频电话的实现。

CaasKitHelper.java

public class CaasKitHelper { ... public int makeCall(String phoneNumber, HwCaasUtils.CallType callType) { Log.d(TAG, "makeCall."); if (mHwCaasHandler != null) { int retCode = mHwCaasHandler.makeCall(phoneNumber, callType); Log.d(TAG, "makeCall retCode: " + retCode); return retCode; } return -1; } ... }

在合适的地方进行调用:
CaasKitActivity.java

public class CaasKitActivity extends AppCompatActivity { ... private Button mMakeVideoCall; private Button mMakeAudioCall; ... private void initData() { ... mMakeVideoCall.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { makeCall(HwCaasUtils.CallType.VIDEO_CALL); } }); mMakeAudioCall.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { makeCall(HwCaasUtils.CallType.VOICE_CALL); } }); ... } private void makeCall(HwCaasUtils.CallType callType) { int retCode = CaasKitHelper.getInstance().makeCall(mPhoneNumber.getText().toString(), callType); Log.d(TAG, "makeCall:retCode: " + retCode); } }

6. 释放资源。

CaasKitHelper.java

public class CaasKitHelper { ... public void caasKitRelease() { if (mIsCaasKitInit) { if (mHwCaasServiceManager != null) { /** Source release */ mHwCaasServiceManager.release(); mHwCaasServiceManager = null; } mIsCaasKitInit = false; } } }

在合适的位置调用:
CaasKitActivity.java

public class CaasKitActivity extends AppCompatActivity { ... @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy."); CaasKitHelper.getInstance().caasKitRelease(); } }

祝贺你,你已经成功完成了Codelab并学到了:

您可以阅读下面链接,了解更多相关的信息。
相关文档

源码下载

Code copied