2016年8月13日 星期六

如何使用EWS Api 使 Outlook Calendar 在 Android 上同步化

前言:
這件事情讓我研究了一段時間,因為官方有兩個方案:一個是用REST Api 來同步Android專案,這個稍微有點複雜,我也嘗試寫了幾個Demo但是效果感覺不好,因為他沒辦法自己設定登陸畫面(Login),官方會直接將App轉入他們自己的畫面(這有點類似WebView的感覺),所以感覺醜醜的.... 也沒什麼安全感
以下是官方的QickStart的GitHub連結: 大家可以參考一下
https://github.com/OfficeDev/Outlook-SDK-Android
畫面截圖:






















以上就是他的登陸畫面,如果這麼多東西放在一個小小的手機裡頭,用戶應該會摔手機...或這刪除程式 .....



所以接下來我要介紹第二個方案, EWS for Android
 在網路上都會看到這個:
https://github.com/OfficeDev/ews-java-api
但 Android Studio無法運行這個第三方Lib,這只是For Java only的Lib,我建議大家可以在裡頭的wiki 看如何調用它的Api方式,等等會介紹我上網找到的Lib並且已經成功放置功能在專案裡頭了!
PS:如果有人有其他更好的意見或者Third party Library歡迎提供留言呦!


正文:
首先先找到這個Git專案:
https://github.com/vanan08/AndroidExchange-EWS-

並運行裡頭的TestEWS,如果一切都在預料之中,在App填入帳號密碼並且填入標題,就可以實作完成了。






















看到這裡有沒有很簡單?接下來只要參考這個專案,在參加所需要的功能後就大功告成了!
詳情請參考:
https://github.com/OfficeDev/ews-java-api/wiki


接下來我會稍微簡單的介紹一下如何使用這個Liberary來騙騙字數,其實以下的內容的都包含在wiki


  • 第一步:匯入專案
由於小弟實在是很懶,所以直接把"eWSForAndroid"的Lib 放入了Android專案裡頭。

首先先將"eWSForAndroid" 複製貼上到專案裡頭,接著你會發現在Android Studio會找不到這個專案,這個時候不要驚慌。


  • 進入Gradle Scripts / setting.gradle  增加  include ':eWSForAndroid' 
include ':app'
include ':eWSForAndroid'


  • 接下來進入 Gradle Scripts / build.gradle 匯入專案 : 

compile project(':eWSForAndroid')


程式碼如下:
apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "ching.outlook"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile project(':eWSForAndroid')
}





  • 進入MainActivty,最後在把根據官方提供的Api寫進去就大功告成了:
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
        ExchangeCredentials credentials = new WebCredentials("book887118@outlook.com", "Aa7874747474");  //輸入自己的帳號密碼
        service.setCredentials(credentials);
        try {
            service.autodiscoverUrl("book887118@outlook.com"); /輸入自己的帳號
        } catch (Exception e) {
            e.printStackTrace();
        }




設定service 就可利用EWS api來實現想要實現的功能呦!

PS:如果有不會,或者是有更正的地方歡迎在底下留言^^


附上專案源碼:https://github.com/book87118/Android_Googlecalendar_Outlookcalender_Sync