[iOS] Intercom 客戶溝通平台
我們想要觀察或追蹤使用者,來提供符合其需求的服務,無論使用者登入與否,我們皆能掌握其動態。甚至使用者想要聯繫客服,也變得相當方便簡單。

可以想像這樣的情境,當使用者對某頁面感到疑惑,我們在後台看到他停留許久,此時就能推送關心提示,讓他能順利完成需求!
我們想要觀察或追蹤使用者,來提供符合其需求的服務,無論使用者登入與否,我們皆能掌握其動態。甚至使用者想要聯繫客服,也變得相當方便簡單。

可以想像這樣的情境,當使用者對某頁面感到疑惑,我們在後台看到他停留許久,此時就能推送關心提示,讓他能順利完成需求!
近年來App流行漸層色彩影像 (Gradient Color Image),我們不想要美術師出圖,因為有很多螢幕尺寸要考量,所以想由程式碼來個別生成。
結果圖上有三個Image View,上圖為單純藍色,左下為水平漸層黑色alpha值由1到0,右下為垂直漸層黑色alpha值由1到0。
我將所需要的程式碼檔案放在GitHub Gist:Gradient Color Image。
很多時候我們會把資料儲存在User Defaults,也就是本機端,只要App不被刪掉,那麼每次重新開啟App,就能再從User Defaults取得先前所儲存的資料。
有某時候我們需要把User Defaults給清空,比如要給其它帳號使用,此時登出A就要將A所儲存的User Defaults給清除乾淨,而登入B後又是全新沒有受污染的User Defaults。
該怎麼做呢?以下的code就能刪除所有存在User Defaults中的key,不過卻不會刪掉系統預設的key呢!
/**
Theme: Delete User Defaults
IDE: Xcode 7
Language: Objective C
Date: 104/12/07
Author: HappyMan
Blog: https://cg2010studio.wordpress.com/
*/
#pragma mark - 刪除 UserDefaults
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
NSDictionary *dict = [defs dictionaryRepresentation];
for (id key in dict) {
[defs removeObjectForKey:key];
}
[defs synchronize];
清空前的User Defaults之key群:
(
GGUserDefaultsKeyLoginAccount,
AppleKeyboardsExpanded,
GGUserDefaultsKeyLoginPassword,
PCSavePendingUserDefaults,
GGUserDefaultsKeyhasFirstShowMenu,
GGUserDefaultsKeyIsLogin,
INNextHearbeatDate,
com.apple.content-rating.ExplicitBooksAllowed,
GGUserDefaultsKeyLoginPasswordAlternative,
AppleKeyboards,
HasUserRegisteredFonts,
PKEnableStockholmSettings,
GGUserDefaultsKeyRememberPassword,
AppleLanguagesDidMigrate,
com.apple.content-rating.TVShowRating,
com.apple.content-rating.ExplicitMusicPodcastsAllowed,
NSLanguages,
com.apple.content-rating.MovieRating,
GGUserDefaultsKeyQBId,
GGUserDefaultsKeyLoginAccountAlternative,
PreferredLanguages,
AddingEmojiKeybordHandled,
MSVLoggingMasterSwitchEnabledKey,
AppleLocale,
AppleLanguages,
NSInterfaceStyle,
com.apple.content-rating.AppRating,
AppleITunesStoreItemKinds
)
清空後的User Defaults之key群:
(
PKEnableStockholmSettings,
INNextHearbeatDate,
MSVLoggingMasterSwitchEnabledKey,
AppleITunesStoreItemKinds,
AddingEmojiKeybordHandled,
com.apple.content-rating.ExplicitBooksAllowed,
com.apple.content-rating.MovieRating,
HasUserRegisteredFonts,
AppleLanguagesDidMigrate,
com.apple.content-rating.AppRating,
AppleLanguages,
NSLanguages,
NSInterfaceStyle,
com.apple.content-rating.ExplicitMusicPodcastsAllowed,
AppleKeyboardsExpanded,
AppleKeyboards,
PreferredLanguages,
AppleLocale,
com.apple.content-rating.TVShowRating
)
key前綴為PC或GG,就是我在此專案中儲存資料用的key喔~
會使用手機的人都一定會接觸到推播通知!身為iOS App開發者三年的我,也只大概瞭解其如何實作,現在我要來揭開它詳細的運作原理與架構。這裡也不想花大篇幅描述太多細節,不是很聰明的我就用圖解蘋果推播通知服務 (Apple Push Notification Service)的方式來理解它!
官方開發者文件已經說得非常清楚,然而會主動去翻來看的人並不多,大概是因為全部都是英文描述,加上十分詳細的說明,讓想要快速上手的人另尋其它網頁。上週幫朋友小A測試iOS後台推播,更進一步知道如何申請推播憑證,在此之前要先申請開發憑證!才知道iOS的推播還真的很「耐人尋味」。想起八月份的百貨公司案子,所使用的後台推播服務是被臉書收購的Parse,它讓我不必自製一個後台就能輕易地把訊息推播到裝置上!
原本在公司就是使用非常快速的WiFi,自己在開發測試的時候顯然沒有網路慢的問題,然而因為開發的app是要給米國人使用,此時就要考慮米國網路環境問題,據說,米國網路環境不如台灣好⋯⋯
iPhone的相機規格性能相當好,以iPhone 6為例,它有800萬畫素,寬高比為3×4或4×3,我們想要讓拍的相片的寬高比變為4×6或6×4,該怎麼做呢?
幾乎沒有在用UITableViewController的我卡住了,真不曉得為何一定要用UITableViewController?因為它限制太大,其實可以由UIViewController所取代。因為table view固定整個畫面,要設定其frame就不太容易,想要加上客製view也真是難⋯⋯
因為是拿他人寫好的專案來改,他用storyboard做好一切會員有關的頁面,前後流程都已經確定,甚至此頁面的class是繼承他自己定義好的基礎class,所以我才不會想要大費周章從UITableViewController搬到UIViewController!
時常用Xcode除錯的工程師都知道,Xcode對中文字還不是很友善,因為除錯時印出的內容,中文字都會變成以\U為開頭的編碼,如:
\U900d\U9059\U6587\U5de5\U4f5c\U5ba4
儘管知道這是中文字,但實在很難確認這行代表什麼字啊⋯⋯
好在總是有解決方案,我強者同事阿宅,找到解法更發揚光大,讓任何人只要引用自訂Category,之後在Xcode除錯平台上必能如實顯示中文字!
HappyMan・迴響