Just My Life & My Work

Posts tagged ‘ios’

MVC與MVP

已經寫超過三年半的iOS App,一直以為自己對MVC很熟,但其實不然,畢竟我一直不是用正規的MVC來實作,相信大多數的iOS App開發者也有類似的煩惱XD~

不過沒有寫得很標準,其實不會怎樣,大不了專案難以維護,接手你程式的工程師想要翻桌,這是每位稱職工程師的必經之路!於是我們會學習會成長,然後寫出更好的架構來。

最近技術委員會決議要統一iOS和Android的專案程式架構,由我們最資深的工程師楊大決定從MVC進展到MVP

MVC與MVP.gif

有了這張對照圖,就能很清楚MVC與MVP的差別!最關鍵的地方就在View和Model不互通有無的三角戀情。

(繼續閱讀…)

[iOS] 從WebView被動取得資料

記得先前有研究過從WebView取得回傳值,這是當我們知道web中有可以執行的函式,而iOS的WebView能夠呼叫。假使若不知道怎麼辦?只能猜測?好像也只有這個辦法,當然若想串接就要雙方講好規則,無論被動還是主動都可以實現!

這次想做從WebView被動取得資料,注意這裡是被動,情境是在使用者點擊按鈕,iOS的WebView會收到請求,此時就可以拆解請求的URL來進行接續動作。

iOS Webview javascript

(繼續閱讀…)

IDFA、IDFV、UUID

想要追蹤、統計、分析用戶,自然離不開用戶唯一識別碼,這是每個公司都會面臨的問題。在歷史上唯一識別碼很多,如UDID、MAC位址、OpenUDID等,這裡就不再一一介紹它們是怎麼被淘汰,現在好用的只剩下了IDFA、IDFV、UUID+keyChain

IDFA.png

我每次送審App,最後itunes connect都會問,有沒有使用IDFA,若沒有正確回答,那麼這個版本就要被拒絕!(除了log,我不知道apple審核員還會怎麼查證)可見這個議題是多麽重要,所以有必要瞭解一下!

(繼續閱讀…)

[iOS] OneSignal 推播服務

自從被Facebook收購的Parse三月宣布一年後關門大吉後,許多行動開發者陸續在找替代方案,於是OneSignal推播服務就出現在我面前XD~

oneSignal.png

儘管OneSignal只有推播服務,那也足夠我們開發者使用!不然萬一它像Parse有龐大的資料庫的話,哪天還得想辦法備份轉移呢~據說它支援至少14種開發平台

(繼續閱讀…)

[iOS] 應用查詢格式 (Application Query Schemes)

看這標題應用查詢格式 (Application Query Schemes)不知在表達啥咪,那就用白話文解釋⋯⋯就是我們的App想要跳轉到他人App時,所要遵從的規範。在iOS 9之後Apple更改遊戲規則,必須在info.plist注明我們想要跳轉的格式,不然程式就會報錯:

This app is not allowed to query for scheme

比如我想要跳轉到Google Map App,我會在程式碼中設定開頭:

comgooglemaps://

iOS 9以後就要在info.plist加入:

iOS Application Query Schemes plist.png

果真加入後立馬編譯執行,就能跳轉到Google Map App,而不是到App Store App的Google Map App頁面呢~

參考:[iOS] 使用Google Map導航[iOS] 使用Google Map顯示地點、Google SDK –
Google 地圖 URL 配置canOpenUrl – This app is not allowed to query for scheme instragram iOS9

[iOS] 取得Youtube影片的標題

有時候需要透過程式取得Youtube影片的標題,在網路上找了許久卻沒找到直接可用的API,方法是有很多種,比如使用Youtube的SDK,然而就要申請帳號來獲取API Key,明明是很簡單的任務,卻要大費周章來實現,最後我選擇較為簡潔的做法!

透過以下的Url Template,先取得該影片的所有資料,如下列網址帶入Video ID,我們將可取回一大串String。

http://youtube.com/get_video_info?video_id=XXXXXXXXXXX

字串截圖:

iOS 取得Youtube影片的標題.png

我們的目標字串為:

title=%E9%96%BB%E5%A5%95%E6%A0%BC+Janice+Yan+%5B+%E4%B9%9F%E5%8F%AF%E4%BB%A5+%5D+%28%E9%9B%BB%E5%BD%B1%E3%80%8C%E8%BF%BD%E5%A9%9A%E6%97%A5%E8%A8%98%E3%80%8D%E6%8F%92%E6%9B%B2%29+%E7%89%87%E8%8A%B1%E7%89%88Music+Video

我先找「title=」字眼,後面的字串到「&」之前,就是我要的標題。中文字被轉成百分比+字母(stringByRemovingPercentEncoding),所以要轉回去,最後還要取代掉「+」為「 (空白鍵)」。

Objective C可以這樣來剖析(Parse):

/**
Theme: fetch Title of Video from Youtube
IDE: Xcode 7
Language: C++
Date: 105/05/06
Author: HappyMan
Blog: https://cg2010studio.wordpress.com/
*/
    NSString *title = [[[[[[string componentsSeparatedByString:@"title="] lastObject] componentsSeparatedByString:@"&"] firstObject] stringByRemovingPercentEncoding] stringByReplacingOccurrencesOfString:@"+" withString:@" "];

我找的Video ID是PZGwZwGQTlk,經過上述程式碼剖析、解碼、取代,就得到追婚日記的插曲標題:閻奕格 Janice Yan [ 也可以 ] (電影「追婚日記」插曲) 片花版Music Video。

iOS 取得Youtube影片的標題2.png

 

這裡要注意的是,並不是所有影片資料字串都會有title=喔!若有title=會出現在不一樣的位置,我找到的這個例子剛好是在最前面!

.

參考:Get title from YouTube videos

[iOS] 搜尋控制器客制按鈕

先前有提過搜尋控制器 (Search Controller),現在想要讓搜尋控制器客制按鈕,預設只有一個取消按鈕,那我們怎麼讓它變成兩個按鈕呢?

iOS 搜尋控制器客制按鈕

(繼續閱讀…)

[iOS] 處理推送通知 (Process Push Notification)

前一陣子介紹圖解APP訊息推播流程,是關於iOS和Android兩大平台從發送到接收的整個過程,現在我們想要實作處理推送通知 (Process Push Notification),iOS SDK已經包好方法只要註冊成功後,就能透過某個method來繼續接下來的處理。可以先參考圖解蘋果推播通知服務 (Apple Push Notification Service)

Apple Push Notification Service00002

(繼續閱讀…)

[iOS] UIAlertController

UIAlertView已經被棄用,iOS 8開始由UIAlertController取代它囉!如此變得更親切迷人~

iOS UIAlertController.jpg

過去能透過UIAlertView做出可填寫欄位UITextField,現在UIAlertController也能實現,而且更加方便好操作。

例如上圖程式碼這麼寫:

/**
 Theme: UIAlertController
 IDE: Xcode 7
 Language: Objective C
 Date: 105/03/30
 Author: HappyMan
 Blog: https://cg2010studio.wordpress.com/
 */
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"修改暱稱"
                                                                   message:@""
                                                            preferredStyle:UIAlertControllerStyleAlert];
    [alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
        // optionally configure the text field
        textField.keyboardType = UIKeyboardTypeDefault;
    }];

    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"送出"
                                                       style:UIAlertActionStyleDefault
                                                     handler:^(UIAlertAction *action) {
                                                         UITextField *textField = [alert.textFields firstObject];

                                                     }];
    [alert addAction:okAction];

    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

    }];
    [alert addAction:cancelAction];

    [self presentViewController:alert animated:YES completion:nil];

看要增加幾個選項按鈕都可以,而且都是用Block來做後續處理,不用再像過去還要跳來跳去的Delegate

參考:About UIAlertView with Textfield

[iOS] 列表下拉更新

現在使用多數的App,若資料是以列表呈現,多會實作列表下拉更新,因為使用體驗非常親民直覺,所以沿用至今,於是我也想實現這功能啦⋯⋯

iOS 列表下拉更新.jpg

(繼續閱讀…)

標籤雲