Android Calendar SDK Integration
工程配置
arr 包导入
需要导入 3 个 aar 包,分别为: gnet_meeting.aar, GNetTangSDKUI-release.aar, gnet_calendar.arr
首先将这 3 个 aar 包 import module 进项目中,
将会看到以下目录结构(third_library 目录是 额外添加的根目录,只是示例中添加)
此时打开项目根目录的 settings.gradle 文件,你会看到如下视图:(其中 demo 是示例的主工 程)
libs文件夹
将 libs 下的文件拷贝进主工程对应的 libs 文件夹下
build.gradle 配置
主工程的 build.gradle 修改如下(示例中 demo 目录下)
1) defaultConfig 中设置 multiDexEnabled true
2) dependencies
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:24.2.1' compile 'com.android.support:percent:24.2.1' compile 'com.android.support:design:24.2.1' compile 'com.android.support:multidex:'
compile project(':third_library:GNetTangSDKUI-release')
compile project(':third_library:gnet_meeting')
compile project(':third_library:gnet_calendar')
//云会议
compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'
compile 'com.jakewharton.rxbinding:rxbinding:0.3.0' compile 'org.greenrobot:eventbus:3.0.0'
compile 'com.github.bumptech.glide:glide:3.7.0'
}
AndroidManifest.xml
日历 SDK 中用到了百度定位 SDK,所以需要申请秘钥 申请链接:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key
百度SDK的初始化操作已经在日历SDK中调用, 只需要在配置文件加入右侧代码即可:
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"/>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="申请的秘钥"
tools:replace="android:value"/>
android 集成接口(java)
public class UCCalendarError {
public static enum ErrCode { ERR_LOGIN_EMPTY_PARAM, ERR_LOGIN_ERROR_PARAM, ERR_INVALID_USER_ID, ERR_INVALID_USER_TOKEN,
ERR_SERVER_ERR
}
public int getErrCode();
public String getError();
};
public class UCCalendarConfig {
public void setLogPath(String path);
public void setDebugMode(boolean isDebug);
};
class UCCalendarUserStatusListener {
public void onSessionInvalid();
};
class UCCalendarLoginCallback {
public void onSuccess();
public void onError(UCCalendarError err);
}
class UCCalendarClient {
public static void init(Context appCtx, UCCalendarConfig config);
public static void addUserStatusListener(UCCalendarUserStatusListener listener);
public static void login(String uid, String token, UCCalendarLoginCallback callback);
public static void logout();
public static void showCalendar(Context ctx);
public static void createConference (Context ctx, List<String> participants);
public static void setPhoneNumber(String phone) ;
public static void joinConf(Context ctx,long eventId) ;
public static void joinConfImmediately (Context ctx, int confId, String userName, String confPwd);
public static void showConfDetail(Context ctx, long eventId)
}
集成说明:
初始化SDK
在Application的 onCreate方法中初始化(Application 请继承 MultiDexApplication)
UCCalendarConfig config = new UCCalendarConfig();
// 设置日志打印路径
config.setLogPath("XXXXXX");
...
//初始化
UCCalendarClient.init(getApplicationContext(), config);
注:请在初始化 SDK(UCCalendarClient.init(getApplicationContext(), config))方法之前添加相关代码。
// 如果 APP 启用了远程的 service,此 application:onCreate 会被调用 2 次
String appName = getAppName();
if (appName!= null && ! appName.equalsIgnoreCase(getPackageName())) {
Log.i("enter the service process!");
return;
}
getAppName参考如示例:
private String getAppName() {
int pID = android.os.Process.myPid();
try {
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> l = am.getRunningAppProcesses();
Iterator<ActivityManager.RunningAppProcessInfo> i = l.iterator();
while (i.hasNext()) {
ActivityManager.RunningAppProcessInfo info= i.next();
if (info.pid == pID) {
return info.processName;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
登录认证
集成方在自己的 APP 登录成功后从集成方后台 server 获取了该用户账号对应的全时账号 uid 和 token
(uid 和 token 集成方 server 如何获取请参考 server 接入说明),
调用 sdk 提供的 login 接口,该接口 方法为异步方法,callback 方法返回登录结果
UCCalendarClient.login(uid, token, new UCCalendarLoginCallback(){
@Override
public void onSuccess() {
Log.d("登录全时日历服务器成功!");
}
@Override
public void onError(UCCalendarError err) {
Log.d("登录聊天服务器失败!" + err.getString());
}
});
注册账号有效性监听:
在使用日历过程,可能会出现账户无效的情况,例如通信证过期, token 更改,所以需要集成方收到相应 的回调后重新登录认证
UCCalendarClient.addUserStatusListener(new UCCalendarUserStatusListener(){
@Override
public void onSessionInvalid() {
...
UCCalendarClient.getInstance().login(uid, token, ...
}
});
集成方App用户登出账号时需确保调用UCCalendarClient.logout()同时登出日历服务
调起日历界面
登录认证成功后,即可通过 sdk 接口调起日历界面
UCCalendarClient.showCalendar(ctx);
或在群聊中调起安排会议界面,参会人列表参数传入全时账号 uid 的列表
UCCalendarClient.createConference(ctx, uidList);
设置外呼电话
可以在初始化日历 SDK 的 UCCalendarClient.init(getApplicationContext(), config)中设置
config.setPhoneNumber("139XXXXXXX");
如果在程序运行中要更改的话,可以调用:
UCCalendarClient.setPhoneNumber("139XXXXXXX");
设置 scheme 启动方式(手机日历点击直接入会)
在初始化日历 SDK 的 UCCalendarClient.init(getApplicationContext(), config)中设置
config.setScheme("http://demo.com/calendar/");
该路径在需要监听的 Activity 中配置,host 和 pathPattern 格式请参照 demo 示例配置如下
然后在监听的 Activity 中,监听是否是 scheme 启动,
如果是则解析数据,并调用 UCCalendarClient.joinConf() 立即入会,
demo 以 MainActivity 示例,在 onCreate 函数调用:
打开会议详情界面
调用 UCCalendarClient.showConfDetail(ctx,eventId)函数即可
直接入会
调用 UCCalendarClient. joinConfImmediately (ctx, confId, userName, confPwd); 函数即可
注意该方法不需要登陆也可调用