Number: 011, Date: 2025-03-24

2025.03.17 ~ 2025.03.23

👉 Implementing SNS Login in Flutter


I implemented SNS login functionality in Flutter.

I implemented four login options: Kakao, Google, Facebook, and Apple. While the Flutter code itself was quite simple, the key challenges were registering each service platform and securely handling the App Key.

For Android, SHA-1 certificate fingerprints are used, and there are slight differences in project settings depending on whether Firebase Auth is used for Google login.


🏢 MVC Todo Project Analysis


When using the Cocoa MVC pattern, two main issues are often mentioned:

  1. Violation of the encapsulation principle.
  2. ViewController handling too much logic.

I analyzed the MVCTodo project, which shows solutions to these two issues. The project resolves the “Massive ViewController” problem by using reusable ContainerViewController and ListViewController components that switch child ViewControllers based on state. The project also addresses the encapsulation issue by using a Coordinator pattern.

This could serve as a useful reference when working with the Cocoa MVC pattern in the future.


🦋 AppsFlyer In-App Event Implementation Tips


Here are some helpful tips for adding AppsFlyer in-app events:

  1. Delaying start function until ATT permission request:When integrating the SDK on iOS, you can use the waitForATTUserAuthorization method to delay the start function until the app tracking transparency (ATT) permission request is handled. This is because, in in-app events, the IDFA value can only be included if the permission is granted. If permission is denied, the IDFA value is excluded from the event.
  2. AppsFlyer unique device ID:The SDK provides the getAppsFlyerUID() method to get the AppsFlyer unique device ID. This UID is generated when the app is installed and the SDK is connected. You can also use a CustomUserID value for service-specific identification.
  3. Use predefined event names:Using predefined event names for in-app event parameters helps avoid typos and makes it easier to modify the code later. It also prevents conflicts with custom parameters. However, custom parameters are not shown in raw data but can be found using the conversion data SDK API.
  4. Verify in-app events:You can verify in-app events through the SDK integration test settings on the dashboard.

🙋🏻‍♂️ Other Notes


  1. Checking app notification permission:To check app notification permissions, you should use UNUserNotificationCenter.current().getNotificationSettings. The UIApplication.shared.isRegisteredForRemoteNotifications method only checks if the app is registered for remote notifications through APNs. If registerForRemoteNotifications() is called from another location, it may provide incorrect information.
  2. applicationWillTerminate not being called:If applicationWillTerminate in AppDelegate is not called, add the following key to the Info.plist file and set it to true:
    • Application can be killed immediately when user is shutting down or logging out
  3. A well-organized blog post on the history of programming languages:There is a well-organized blog post summarizing the characteristics of programming languages by era.
  4. Flutter SwiftPM support:Flutter has supported SwiftPM (Swift Package Manager) since version 3.2.4.