CaaS Engine是华为依托畅连业务通信能力,面向应用开发者提供的开放接口,CaaS Engine基于开发者应用自身的联系人(好友)等社交体系,可以帮助开发者快速实现应用内音视频通话服务。
在这个Codelab中,你将创建Demo Project,并将CaaS Engine的SDK集成到Demo Project中,以及完成CaaS Engine服务的整体流程搭建。
集成CaaS Engine能力,需要完成以下准备工作:
向项目中的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'
}
点击同步工程按钮,进行工程同步,如下图所示:
同步成功后,如下图所示:
在自身应用AndroidManifest.xml中添加开发者联盟创建应用时生成的appid信息,name为"com.huawei.hms.client.appid",value为"appid=*",*用自己注册的appid。权限申请,请依照《开发指南》中"开发准备"的详细说明来完成。
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);
}
}
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());
}
});
...
}
}
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);
}
}
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并学到了:
您可以阅读下面链接,了解更多相关的信息。
相关文档