Translate

2016年7月29日 星期五

App Google API Calendar 教學 (note)


  
→建立一個新的授權,若您的使用者砍了你的授權,二次想加回去,直接使用這個就好了
[self presentViewController:[self createAuthController] animated:YES completion:nil];

★授權

Google教學一般只給
kGTLAuthScopeCalendarReadonly

要管理的話(能新增修改編輯)授權權限要改為這個
kGTLAuthScopeCalendar

→建立一個日曆 


    GTLCalendarCalendar*newCalendar=[GTLCalendarCalendar object];

 //新名字就是new Calendar
    newCalendar.summary=@"new Calendar";

    GTLQueryCalendar *queryInsertCalendarList = [GTLQueryCalendar queryForCalendarsInsertWithObject:newCalendar];
    [self.service executeQuery:queryInsertCalendarList
                      delegate:self
             didFinishSelector:nil];


→取得日曆列表



- (void)fetchCalendarList {
    GTLQueryCalendar *query = [GTLQueryCalendar queryForCalendarListList];
    [self.service executeQuery:query
                      delegate:self
             didFinishSelector:@selector(Result_CalendarList:finishedWithObject:error:)];
}

- (void)Result_CalendarList:(GTLServiceTicket *)ticket
   finishedWithObject:(GTLCalendarCalendarList *)list
                error:(NSError *)error {
    
    if (error == nil) {

        for(GTLCalendarCalendarListEntry *cal in list.items){
            //cal.identifier;//判定是否有過
            NSLog(@"%@",cal.summary);
        }
        
    } else {
        [self showAlert:@"Error" message:error.localizedDescription];
    }

}


→刪除授權

 [GTMOAuth2ViewControllerTouch removeAuthFromKeychainForName:kKeychainItemName];



→建立一個事件,此事件活動為一整天

[CalendarID]
need change

- (void)CreateEvent{

    GTLCalendarEvent *calEvent =[GTLCalendarEvent object];
    calEvent.summary= @"test";
    calEvent.descriptionProperty=@"i am test";
    
    calEvent.start = [GTLCalendarEventDateTime object];
    calEvent.end = [GTLCalendarEventDateTime object];
    
    calEvent.start.dateTime=[GTLDateTime dateTimeWithDate:[NSDate dateWithTimeIntervalSinceNow:60*60] timeZone:[NSTimeZone localTimeZone]];


    calEvent.end.dateTime=[GTLDateTime dateTimeWithDate:[NSDate dateWithTimeIntervalSinceNow:60*60+60*60] timeZone:[NSTimeZone localTimeZone]];

    GTLDateTime *startDateTime = [GTLDateTime dateTimeForAllDayWithDate:[NSDate date]
                                                     ];
    
    calEvent.start = [GTLCalendarEventDateTime object];
    calEvent.start.date = startDateTime;
    
    calEvent.end = [GTLCalendarEventDateTime object];
    calEvent.end.date=startDateTime;
    
    
    GTLQueryCalendar *query = [GTLQueryCalendar queryForEventsInsertWithObject:calEvent calendarId:@"[CalendarID]" ];//日曆id
    
    [self.service executeQuery:query
                      delegate:self
             didFinishSelector:@selector(Result_CreateEvent:finishedWithObject:error:)];
}

//結果顯示
- (void)Result_CreateEvent:(GTLServiceTicket *)ticket
           finishedWithObject:(GTLCalendarEvent *)events
                        error:(NSError *)error {
    if (error == nil) {
        //events.identifier; 新增事件iid
    } else {
        [self showAlert:@"Error" message:error.localizedDescription];
    }
}


→編輯一個事件,更新時間為目前時間1小時後的事件

[CalendarID]
[EventID]
need change

   GTLCalendarEvent *calEvent =[GTLCalendarEvent object];
    calEvent.summary= @"change test";
    calEvent.descriptionProperty=@"i am change test";
    
    calEvent.start = [GTLCalendarEventDateTime object];
    calEvent.end = [GTLCalendarEventDateTime object];
    
    calEvent.start.dateTime=[GTLDateTime dateTimeWithDate:[NSDate dateWithTimeIntervalSinceNow:60*60] timeZone:[NSTimeZone localTimeZone]];
    
    
    calEvent.end.dateTime=[GTLDateTime dateTimeWithDate:[NSDate dateWithTimeIntervalSinceNow:60*60+60*60] timeZone:[NSTimeZone localTimeZone]];
    
    NSDate *anHourFromNow = [NSDate dateWithTimeIntervalSinceNow:60*60];
    GTLDateTime *startDateTime = [GTLDateTime dateTimeWithDate:[NSDate date]
                                                      timeZone:[NSTimeZone systemTimeZone]];
    GTLDateTime *endDateTime = [GTLDateTime dateTimeWithDate:anHourFromNow
                                                    timeZone:[NSTimeZone systemTimeZone]];
    
    calEvent.start = [GTLCalendarEventDateTime object];
    calEvent.start.dateTime = startDateTime;
    
    calEvent.end = [GTLCalendarEventDateTime object];
    calEvent.end.dateTime = endDateTime;
    
    
    GTLQueryCalendar *query = [GTLQueryCalendar queryForEventsUpdateWithObject:calEvent
                                                                    calendarId:@"[CalendarID]"                                    eventId:@"[EventID]"];//日曆id
    
    
    [self.service executeQuery:query
                      delegate:self
             didFinishSelector:nil];
}

→刪除一個事件

[CalendarID]
[EventID]
need change

GTLQueryCalendar *query = [GTLQueryCalendar queryForEventsDeleteWithCalendarId:@"[CalendarID]"   eventId:@"[EventID]"];//日曆id

[self.service executeQuery:query delegate:selfdidFinishSelector:nil];

App Google API Calendar 教學


★Google官方教學~快速建立跟檢視(本篇主要照這個改)
https://developers.google.com/google-apps/calendar/quickstart/ios?hl=zh-tw

Google官方教學~指南(如果注意到的話,也跟上面其實是同一頁面)
https://developers.google.com/google-apps/calendar/v3/reference/?hl=zh-tw

中文的API介紹
https://jaygoo.hackpad.com/google-Calendar-API-E5pl6UbGOvN#:h=4.取得日曆活動


下面是補充用的...
Google官方熱門產品查詢
https://developers.google.com/products/?hl=zh-tw


看帳戶的授權
https://security.google.com/settings/security/permissions

API申請憑證
https://console.developers.google.com/apis?pli=1


主要是照著官方教學做的...


1.剛開始先去申請憑證https://console.developers.google.com/apis?pli=1
建立一個專案,建立好後,再選【資料庫】(在左邊工具列),找右邊選項你要開的API項目,日曆在最右邊第二個位置,點開連結後,按下上方的啟用,就可以了。

2.接下來啟用以後,要建立憑證,按下【前往憑證】,重點來了,接下來呼叫來源下拉選擇iOS裝置,然後下方的使用者資料也要勾選後,再按下【我需要哪些憑證】…

3.然後你可以進行名稱命名,聯繫ID你可以隨便打一組,不過如果你有APP的話,還是用APP 的 SKU ID為主…

4.然後建立好,其他就看你要怎麼顯示授權頁面了…最主的是最後顯示出來的Client ID很重要,要留著,等一下程式要用到,不然也可以下載下來,裡面的檔案用筆記本開啟,把ID拿出來也可以…


~~~~~~~~~~~~~~~~


1.開你的XCode吧,建立一個專案,單一頁面,然後再開你的終端機(這裡要先安裝過CocoaPods,不會裝的話看一下這裡http://bahole.blogspot.tw/2016/07/cocoapods_28.html

2.然後一樣終端機的檔案位置要在你的專案底下 ,用pwd指令看看你的目錄在哪,確認位置正確後,在終端機直接貼google給你的教學...(我先照copy,有可能未來會變)

ps
QuickstartApp→是google的專案名,如果你的專案名不一樣要記得改下面內文的文字,改成跟你的專案名稱一樣
cat << EOF > Podfile &&
platform :ios, '7.0'
target 'QuickstartApp' do
    pod 'GoogleAPIClient/Calendar', '~> 1.0.2'
    pod 'GTMOAuth2', '~> 1.1.0'
end
EOF
pod install &&
open QuickstartApp.xcworkspace


3.如果順利的話,他就會幫你裝好了Google的檔案

4.它會直接打開你的專案,接下來依然無腦照著檔案名稱copy下去,除了
Client ID你要換成你自已的,應該就能執行成功了,問你要不要授權~然後就可以顯示最近前10筆活動

~~~~~~~~~~~~~~~~



#import <UIKit/UIKit.h>
#import "GTMOAuth2ViewControllerTouch.h"
#import "GTLCalendar.h"
@interface ViewController : UIViewController
@property (nonatomic, strong) GTLServiceCalendar *service;
@property (nonatomic, strong) UITextView *output;
@end


#import <UIKit/UIKit.h>
#import "GTMOAuth2ViewControllerTouch.h"
#import "GTLCalendar.h"
@interface ViewController : UIViewController
@property (nonatomic, strong) GTLServiceCalendar *service;
@property (nonatomic, strong) UITextView *output;
@end



2016年7月28日 星期四

CocoaPods安裝

試完了整個流程,發現有些地方會莫名卡住,所以在此留下記錄

CocoaPods大部份都要用終端機輸入指令

所以請開終端機>(finder上方選單)>前往>工具程式>終端機

點開它就可以了



接著請直接輸入指令

ruby -v

這時後應該會顯示ruby版本,一般mac都會有版本

然後再輸入下面指令安裝

sudo gem install cocoapods

接著會請你輸入使用者密碼(你在登入畫面要輸入的密碼,若沒有設的話,請先設一組= =)

然後順利的話,就會開始安裝了…(要等一陣子~

上面就結束安裝了…




接著就開始用了,請先開啟你的XCode開一個專案,然後將專案的資料夾丟到桌面

接著終端機的位置請指到你專案的位置

下面指令可以確認你現在的位置

pwd

如果位置不對,就用cd \desktop 之類的DOS指令移過去

接著要開一個指令檔,用以下指令建立(或是最後用記事本更改裡面的指令)

vim Podfile

然後它會進入很難用的編輯模式 = =
然後輸入以下指令

可以參考這個網址給的

https://guides.cocoapods.org/using/the-podfile.html


target 'CocoaPodsDemo' do
  source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '7.0'
pod 'AFNetworking', '~> 2.5'
end

順帶一提 CocoaPodsDemo 是我專案的名字,你要改成專案的名字

要離開的話,按ESC鍵 然後此時如果游標在最下面就輸入:wq

你就會發現你專案資料夾多一個Podfile檔案,你可以滑鼠右鍵選擇開啟方式>記事本

再自已輸入要的指令就好了(終端機的輸入真的很難用,一直跳不出去)


到這邊,你已經完成指令檔了

接著輸入

pod install

會開始安裝指令檔的第三方庫,下方指令是更新,如果install失敗,先update,再install看看

pod update

到些你的專案下面應該會有Pod資料夾,有你要的東西了

未來開啟專案請開

CocoaPodsDemo.xcworkspace

而不是舊有的

CocoaPodsDemo.xcodeproj

就可以了



2016年7月25日 星期一

Mac 終端機學習

上方選單>[finder]>前往>工具程式>終端機

1.
顯示目前所在資料夾

輸入
pwd

2.
顯示檔案列表

輸入
ls

3.
移動目前所在資料夾位置
cd [資料夾名稱]

cd Documents

pwd

4.
回首頁

cd ~

5.
回上一頁
cd ..

6.
到資料夾也可以輸入路徑
cd ~/Documents