# PayEasy iOS SDK 整合指南
## 系統需求
* iOS 15.0
* Xcode 16
* CocoaPods 套件管理工具
## 安裝步驟
### 1. 設定 CocoaPods
1. 透過XCode打開專案目錄 將.xcodeproj直接拖入Terminal取得位置:
```
cd 專案位置/專案名稱.xcodeproj <= 將 /專案名稱.xcodeproj 刪除
```
2. 初始化 Podfile:
```
pod init
```
3. 開啟Podfile:
```
open podfile
```
4. 編輯Podfile內容:
```
platform :ios, '15.0'
target '專案名稱' do
use_frameworks!
pod 'Firebase/Analytics'
end
```
5. 儲存並關閉Podfile 輸入以下指令安裝相依套件
```
pod install
```
### 2. 引入框架
在 Xcode 專案的 General > Frameworks, Libraries, and Embedded Content 中加入以下框架:
* GoogleAppMeasurementIdentitySupport.framework
* GoogleAppMeasurement.framework
* FirebaseAnalytics.framework
* IOS_x_17Life.framework
* KeychainAccess.framework
完成後應該要長這樣

### 3. 設定Keychain Sharing
1. 在 Xcode 中開啟 Sign & Capabilities
2. 點擊左上角 "+" 按鈕
3. 搜尋並添加 "Keychain Sharing"
4. 在 Keychain Sharing 中加入您的 App Bundle Identifier
完成後應該要長這樣

### 4. 配置Info.plist
在 Info.plist 中加入以下權限設定 注意更改裡面的CFBundleURLName:
```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- 位置權限 -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>我們會依照你的位置顯示附近的店家</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>我們會依照你的位置顯示附近的店家</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>我們會依照你的位置顯示附近的店家</string>
<!-- 相機和相簿權限 -->
<key>NSPhotoLibraryUsageDescription</key>
<string>允許「PayEasy福利網」使用你的相簿嗎?</string>
<key>NSCameraUsageDescription</key>
<string>允許「PayEasy福利網」使用你的相機嗎?</string>
<!-- URL Scheme 設定 -->
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>你的BundleID</string>
<key>CFBundleURLSchemes</key>
<array>
<string>payeasystore</string>
</array>
</dict>
</array>
<!-- 外部應用程式支援 -->
<key>LSApplicationQueriesSchemes</key>
<array>
<string>comgooglemaps</string>
</array>
</dict>
</plist>
```
完成後應該要長這樣

並且到GoogleAnalytics下載GCM_PayEasyStore_test下載ios版本的GoogleService-Info.plist
將下載好GoogleService-Info.plist放入專案目錄內

### 5. 使用範例
```
import Firebase
import IOS_x_17Life
import SwiftUI
struct ContentView: View {
@State var channelId: String = "2754d156-2844-41d4-bc10-78b50691f868"
@State var member_id: String = "1"
@State var enterprise_id: String = "8"
@State var shouldNavigate: Bool = false
@FocusState var isFocused: Bool
@State var urlId: String = "" // 為了使分享的連結可以跳轉到指定商店頁面
public init() {
print("!DEBUG FirebaseApp.configure")
FirebaseApp.configure()
}
var body: some View {
NavigationView {
VStack(spacing: 10) {
NavigationLink(
destination: HomeView(
channelId: channelId,
member_id: Int(member_id) ?? 0,
enterprise_id: Int(enterprise_id) ?? 0,
shops_id: urlId
),
isActive: Binding(
get: { shouldNavigate || !urlId.isEmpty },
set: { _ in
shouldNavigate = false
urlId = ""
}
)
) {
EmptyView()
}
Text("channelId")
.frame(maxWidth: .infinity, alignment: .leading)
TextField("channelId", text: $channelId)
.focused($isFocused)
Text("member_id")
.frame(maxWidth: .infinity, alignment: .leading)
TextField("member_id", text: $member_id)
.keyboardType(.numberPad)
.focused($isFocused)
Text("enterprise_id")
.frame(maxWidth: .infinity, alignment: .leading)
TextField("enterprise_id", text: $enterprise_id)
.keyboardType(.numberPad)
.focused($isFocused)
Button(action: {
print(channelId)
print(member_id)
print(enterprise_id)
shouldNavigate = true
}) {
Text("HomeView")
}
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
.frame(width: .infinity, height: .infinity)
.navigationViewStyle(StackNavigationViewStyle()) // 避免嵌套問題
.navigationBarTitleDisplayMode(.inline)
.navigationBarBackButtonHidden(true) // 確保隱藏系統返回按鈕
.onTapGesture {
isFocused = false
}
.handleDeepLink()
}
}
#Preview {
ContentView()
}
```