Android Calendar SDK Integration

工程配置

arr 包导入

需要导入 3 个 aar 包,分别为: gnet_meeting.aar, GNetTangSDKUI-release.aar, gnet_calendar.arr
首先将这 3 个 aar 包 import module 进项目中,
将会看到以下目录结构(third_library 目录是 额外添加的根目录,只是示例中添加)
Calendar SDK aar

此时打开项目根目录的 settings.gradle 文件,你会看到如下视图:(其中 demo 是示例的主工 程) settings.gradle

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 demo

然后在监听的 Activity 中,监听是否是 scheme 启动,
如果是则解析数据,并调用 UCCalendarClient.joinConf() 立即入会,
demo 以 MainActivity 示例,在 onCreate 函数调用: Schema demo

打开会议详情界面

调用 UCCalendarClient.showConfDetail(ctx,eventId)函数即可

直接入会

调用 UCCalendarClient. joinConfImmediately (ctx, confId, userName, confPwd); 函数即可

注意该方法不需要登陆也可调用

results matching ""

    No results matching ""