顯示具有 iOS分享 標籤的文章。 顯示所有文章
顯示具有 iOS分享 標籤的文章。 顯示所有文章

2020年6月19日 星期五

Firebase Dynamic Links with iOS

Firebase Dynamic Links with iOS

此篇主要是分享iOS運用Firebase Dynamic Links的紀錄分享,不過在分享之前,我們需要先知道Firebase Dynamic Links是什麼東西,簡單來說的話,Firebase Dynamic Links是可以讓你在有安裝某App時點擊連結就可以跳到該App(甚至是到App裡的某特定頁面,而如果沒有安裝的話則會導到App Store下載頁面)。

iOS運用Firebase Dynamic Links的步驟:

1. 建立要用Firebase Dynamic Links的專案(或是現有專案要導入Firebase Dynamic Links)

2. 安裝Firebase Dynamic Links iOS SDK:
安裝方式有幾種,這邊介紹透過cocoapods安裝以及直接下載Firebase SDK:

(1). Cocoapods安裝: 打開終端機並切到你的專案底下並輸入pod init 來建立pod file,然後打開113Test.xcworkspace啟動專案並在Podfile裡面貼加 pod 'Firebase/DynamicLinks',儲存後關閉專案,然後在終端機輸入 pod install 就會把Firebase Dynamic Links安裝到專案裡面去,這就是Cocoapods安裝。

(2). 直接下載SDK: 如果不想透過Cocoapods安裝的話也可以直接下載Firebase SDK,網址: https://firebase.google.com/docs/ios/setup?hl=zh-cn#frameworks , 往下找到不使用 CocoaPods 進行集成,下載框架SDK zip的地方下載,下載後直接打開資料夾拖曳你要的SDK到你的專案裡,其中要注意的地方為有的SDK要搭配其他SDK才能正常運作,例如Firebase Dynamic Links要引用FirebaseAnalytics,所以就要同時加入FirebaseAnalytics和Firebase Dynamic Links的SDK,最後就是也要加入Firebase.h檔案,大致會像下圖所示:





3. Xcode專案裡的XXXDelegate引入Firebase.h檔案,然後在didFinishLauchingWithOptions的方法裡添加Firebase的設定程式碼,如下圖所示:




4. 打開網頁輸入https://console.firebase.google.com去Firebase後台。

5. 進到Firebase的管理頁面之後,在左側的工具列選"成長",就可以在裡面看到Dynamic Links,看到之後再選開始使用,會要你輸入網域,有自己的網域的話則輸入自己的網域,沒有的話則輸入google免費提供的測試網域xxxx.page.link (例如我輸入的是maxsysehome.page.link),正個設定如下圖所示:






6. 去Apple Developer上設定要使用Firebase Dynamic Link的專案的identifier裡要啟動Associated Domain,如下圖所示: 

 
7. 在Xcode開發工具裡設定Associated Domain,其中前面一定要加applinks:(your domain),your domain就是你在Firebase Dynamic Links裡面設定的連結,ex: https://maxsysehome.page.link/maxsys,https://後面的就是你的Associated Domain,如下圖所示: 



8. 接下來就可以在line裡面測試連結,ex:https://maxsysehome.page.link/?link=https://www.google.com?callHNCBPage?WFID1111?d&isi=520090927&ibi=com.ESCS.fourDO,則會出現以下畫面: 




此時如果順利按下OPEN就可以測試有裝App時則直接打開App,沒有安裝App時就會跳到該App的下載頁面,如果要做到進入App的特定的頁面的話則需要另外在專案的程式裡面處理

以上就是Firebase Dynamic Links整個的設定




參考資料:
1. Firebase Dynamic Link iOS GitHub下載網址: https://github.com/firebase/quickstart-ios
2. https://firebase.google.com/docs/dynamic-links/ios/receive
3. https://firebase.google.com/docs/ios/setup?hl=zh-cn#objective-c_1
4. https://firebase.google.com/docs/ios/setup?hl=zh-TW


2020年5月13日 星期三

Xcode 11以上與Xcode 10的差異



Xcode 11以上與Xcode 10的差異

Xcode 11開始的開發工具不管是新建立的專案或是整個UI介面都與Xcode 10系列有所差異,本篇就簡短的列出幾個不一樣的地方:

一. 專案架構
Xcode 11 開始新建專案時會多一個檔案(或兩個..看你是用Swift還是Objective C建立專案),就是SceneDelegate.swift(或是SceneDelegate.h, SceneDelegate.m),而這個檔案是用來作什麼的呢?以下就來說明一下:

1. 把之前在AppDelegate裡的applicationWillResignActive, applicationDidEnterBackground..等改到SceneDelegate裡面且名稱稍微有變,變成sceneDidEnterBackground, sceneWillResignActive..等,亦即原本AppDelegate全權處理App生命週期和UI生命週期變成只處理App生命週期,而UI生命週期則改為交由SceneDelegate負責,參考下圖:
                                                         Xcode 10 原先的模式


Xcode 11 以後的模式

SceneDelegate

2. AppDelegate裡面也拿掉了UIWindow *window的宣告改放到SceneDelegate裡面


二.  Xcode 工具的差異
Xcode 10系列的General裡面包含了signing,但在Xcode 11後是與Capabilities合併在一起

以上大致就是目前發現的差異的地方

2017年10月23日 星期一

Swift動畫 -- 矩形按鈕變成圓形按鈕

今天分享如何將矩形的按鈕動畫變成圓形的按鈕,先看原來的畫面,如圖所示按鈕原本是長方形




而我們最後的目標就是將它們變成圓形的按鈕,如下圖所示:




範例中我們用一個Timer來使按鈕3秒過後可以變成圓形的

Timer語法
NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: #selector(ViewController.changeButton), userInfo: nil, repeats: false);

其中的changeButton就是我們要改變Button狀態的方法

程式碼如下
func changeButton(){

        // 設定loginByFB的圖
        var fbButtonImage: UIImage!
        
        fbButtonImage = UIImage(named: "ic__FB_1.png")
        
        self.loginByFB.setImage(fbButtonImage, forState: .Normal)
        
        // 設定loginByGooglePlus的圖
        var googleButtonImage: UIImage!
        
        googleButtonImage = UIImage(named: "ic__G+_1.png")
        
        self.loginByGooglePlus.setImage(googleButtonImage, forState: .Normal)

        // 縮小按鈕的動畫 3.0 = 執行速度 數字越大跑得越慢 ; 這邊是展示縮小放大的動畫
//                UIView.animateWithDuration(3.0 ,
//                                           animations:
//                    {
//                                            // 縮放尺寸
//                                            self.loginByFB.transform = CGAffineTransformMakeScale(0.6, 0.6)
//                                            self.loginByGooglePlus.transform = CGAffineTransformMakeScale(0.6, 0.6)
//                    },
//                                           completion: { finish in
//                                            UIView.animateWithDuration(0.6){
//                                                self.loginByFB.transform = CGAffineTransformIdentity
//                                                self.loginByGooglePlus.transform = CGAffineTransformIdentity
//                                            }
//                })
        

        // 讓按鈕從長方形變成圓形的動畫 -- 用來將FB和Google+按鈕變成圓形的
        UIView.animateWithDuration(3.0 ,
                                   animations:
            {
             
                // 下面程式如果註解掉的話會直接執行completion的地方
                
                // 重新定義 loginByFB 的位置與frame
//                self.loginByFB.frame = CGRectMake(self.loginByFB.frame.origin.x - 60, self.loginByFB.frame.origin.y - 160, self.loginByFB.frame.size.width, self.loginByFB.frame.size.height)
//                
//                self.loginByFB.layer.cornerRadius = 0.5 * self.loginByFB.bounds.size.width
//                
//                
//                self.loginByFB.layer.borderWidth = 1.0
//                self.loginByFB.clipsToBounds = true
//                
//                
//                // 重新定義 loginByGooglePlus 的位置與frame
//                self.loginByGooglePlus.frame = CGRectMake(self.loginByFB.frame.origin.x - 60, self.loginByGooglePlus.frame.origin.y - 160, self.loginByGooglePlus.frame.size.width, self.loginByFB.frame.size.height)
//                
//                self.loginByGooglePlus.layer.cornerRadius = 0.5 * self.loginByFB.bounds.size.width
//                
//                
//                self.loginByGooglePlus.layer.borderWidth = 1.0
//                self.loginByGooglePlus.clipsToBounds = true
                

            },
                                   completion: { finish in
                                    UIView.animateWithDuration(3.0){
                                        
                                        // 重新定義 loginByFB 的位置與frame
                                        self.loginByFB.imageView?.image = fbButtonImage
                                        
                                        self.loginByFB.bounds.size.width = 60
                                        self.loginByFB.bounds.size.height = 60
                                        
                                        self.loginByFB.frame = CGRectMake(self.loginByFB.frame.origin.x - 70, self.loginByFB.frame.origin.y - 145, self.loginByFB.frame.size.width, self.loginByFB.frame.size.height)
                                        
                                        self.loginByFB.layer.cornerRadius = 0.5 * self.loginByFB.bounds.size.width
                                        
                                        self.loginByFB.layer.borderWidth = 1.0
                                        self.loginByFB.clipsToBounds = true
                                        
                                        // 重新定義 loginByGooglePlus 的位置與frame
                                        self.loginByGooglePlus.imageView?.image = fbButtonImage
                                        
                                        self.loginByGooglePlus.bounds.size.width = 60
                                        self.loginByGooglePlus.bounds.size.height = 60
                                        
                                        self.loginByGooglePlus.frame = CGRectMake(self.loginByGooglePlus.frame.origin.x + 60, self.loginByGooglePlus.frame.origin.y - 200, self.loginByGooglePlus.frame.size.width, self.loginByGooglePlus.frame.size.height)
                                        
                                        self.loginByGooglePlus.layer.cornerRadius = 0.5 * self.loginByGooglePlus.bounds.size.width
                                        
                                        self.loginByGooglePlus.layer.borderWidth = 1.0
                                        self.loginByGooglePlus.clipsToBounds = true
                                    }
        })
        
    }


上面程式碼幾乎都有註解,所以就不在這一一說明,只截取動畫有關的程式碼,片段如下

UIView.animateWithDuration(3.0 ,animations:{},completion: { finish in
                                    UIView.animateWithDuration(3.0){}})


其中數字3.0就是動畫執行的速度,數值越大動畫就跑得越慢,而animations:{}的部份表示動畫開始的地方,這個地方可以空白不寫,沒寫的話則動畫會直接跑finish的部分,同樣的finish的地方也可以空白不寫那就只會跑開使的部分



詳細範例可以從以下網址下載
GitHub分享網址: https://github.com/jenemebo/SquareButtonToCircleButton

2017年10月15日 星期日

如何邁向iOS APP工程師 & Swift分享 (二)

今天的分享主要是Swift 3的基本宣告與一些基本概念,而這些分享都是以之前完全對iOS與Swift沒有任何概念的基礎之下,所以會從非常基本的層面開始分享~ 讀者可依據自己的需求跳過已知的部分。

以下便是這次分享的內容主題
1. 學習Swift 3前的前置作業 (以Mac原生環境為例)
2. 如何建立一個Swift專案或是Playground (Playground介紹)
3. 專案結構基本介紹 (vs Objective C)
4. Swift程式風格


一. 學習Swift 3前的前置作業 (以Mac原生環境為例)
1. 一台Mac電腦 (Mac Book Pro / Mac Book Air/ Mac Mini..etc)
雖然網路上有提供在非Mac電腦上撰寫Swift的方法,但是這邊是以Mac原生環境為例,所以要
先準備好一台Mac電腦。
2. 安裝Xcode
有了電腦以後就是安裝Xcode開發工具,Xcode可以在Apple官方網站下載,網址: https://developer.apple.com/download/ (需有Apple ID)

二. 如何建立一個Swift專案或是Playground
 承上步驟安裝好Xcode以後就是建立一個Swift專案,到應用程式啟動Xcode,然後點選File --> New --> Project,如下圖


然後選左邊的iOS --> Application --> Single View Application --> Next,如下圖


然後在Language的地方下拉選單就可以看到Objective-C / Swift的選項,如下圖


再按下Next以後一個Swift的專案就建好了~ 而要建立Playground則是點選File --> New --> Playground --> Single View,Playground最大的特色就是可以即時看到執行的結果。


三. Swift的一些程式風格介紹

Swift基本上是一個很自由的程式,例如if敘述句可以不用加(),當然你要加的話也可以,但是它依然有一些限制的風格,例如Var testInt = testInt2 (空格)+1 與  Var testInt = testInt2+1是不一樣的,因為Swift規定你要不是前後都要有空格,不然就是前後都沒有空格不然便會出錯。

以上就大概稍微介紹如何建立一個Swift專案以及淺談Swift的一些撰寫風格,下次的分享終將會正式進入Swift的程式語言裡。


解決iOS 14上如果更換預設瀏覽器(例如從Safari換成Chrome)時, 用Scheme架構會無法回到上一頁的問題

 如果遇到以下問題時 須在Info裡的LSApplicationQueriesSchemes裡設定多增加https, 如下圖: