This article introduces what App Clip is, why it is beneficial to app downloads, and explains some considerations from the development and testing perspectives based on company projects.
An App Clip is a small part of your App that’s discoverable at the moment it’s needed and lets people complete a quick task from your App — even before installing your full App.
Clip was launched on iOS14 and is a relatively new iOS feature
On the other hand App Clip only provides key features and is very fast to download. The system will automatically delete App Clip after a period of inactivity. Users can use it anonymously without logging in and only registering when it is not necessary.
App advertising costs are high, and the conversion rate is not very ideal. $2.58 – this was the average cost-per-acquisition (CPA) for the entire 2023. Clip is developed on the basis of App, and the development cost is significantly lower than that of App. It can be quickly developed and applied at a lower cost. Research shows that integrating App Clips into iOS applications can increase the conversion rate by more than 20%.
User engagement and experience are improved. Clip provides a quick and easy way for users to use the key features of the App without downloading the full App. This is very beneficial for one-time use scenarios, such as restaurant ordering, renting bicycles, etc. And because it provides a taste of the app’s functionality, Clip will entice users to download the full App, thereby increasing App conversion rate.
Many ways to experience Clip. QR Codes, NFC Tags, App Clip Codes, Safari, Links in Messages, cards in Maps.
App Clip has a huge market. Take China's WeChat Mini Program as an example. Mini Programs can almost compete with AppStore in China. The key is that Mini Programs are easy to obtain and use, and there is no need to install Apps specifically. However, Mini Programs are of no help in converting to apps, and even hinder the installation of Apps. This is related to WeChat's positioning of Mini Programs. It is not for promoting apps but to maintain users on WeChat and earn high profits by charging service fees.
However, in addition to some one-time use scenarios, Clip is more about converting users to full App users. Many measures and restrictions have been taken, for example, some iOS frameworks cannot be used, pictures cannot be stored locally in Clip, APNs notifications are only valid for 8 hours, and prompts to download App can be popped up on appropriate pages.
From the perspective of development efficiency, the fastest way is to directly reuse the code in App. However, because the codes in App usually reference each other, Clip may have to reference module B in order to reference module A, and then reference module C, etc. This will make the Clip code complex and the size increase rapidly. We recommend that Clip code be as independent as possible from App. You can consider rewriting Clip code. According to our implementation, the actual workload is not large.
In some scenarios where code reference is required, macro definitions can be used. For example, in App Build Setting
-> Other Swift Flags
add -DFULL_APP
, and determine whether it is an App in the code:
#if FULL_APP
//do something in App
#else
//do something in Clip
The local data of Clip can be passed to the full App through the app group. First, you need to enable "App Groups"
at Capability, then in Clip:
let sharedUserDefaults = UserDefaults(suiteName: "group.ClipToApp")
sharedUserDefaults.set(encodedData, forKey: "someKeywords")
In Full App:
let data = sharedUserDefaults.data(forKey: "someKeywords")
Clip passes the user login information to the Full App, and the user can automatically log in after downloading the App. Clip logs in through AppleID and uses app group to pass login information:
let credential = authorization.credential as? ASAuthorizationAppleIDCredential
sharedUserDefaults.set(credential.user, forKey: "SavedAppleUserID")
Full App gets AppleID:
let userId = sharedUserDefaults.data(forKey: "SavedAppleUserID")
ASAuthorizationAppleIDProvider().getCredentialState(forUserID: userId) {state, error in …}
Clip logs in through credential, uses keychain to pass login information, and uses kSecAttrLabel to distinguish keychain entry:
let query = [
kSecAttrService: service,
kSecAttrAccount: account,
kSecClass: kSecClassGenericPassword,
kSecAttrLabel as String: "appClip"
] as CFDictionary
let attributesToUpdate = [kSecValueData: credentialData] as CFDictionary
SecItemUpdate(query, attributesToUpdate)
Full App queries the keychain data corresponding to kSecAttrLabel:
let query = [ kSecAttrService: service, kSecAttrAccount: account, kSecClass: kSecClassGenericPassword, kSecReturnData: true kSecAttrLabel as String: "appClip" ] as CFDictionary var result: AnyObject? SecItemCopyMatching(query, &result)
"appclips": {
"apps": ["ABCDE12345.com.example.MyApp.Clip"]
}
<meta name="apple-itunes-app" content="app-id=myAppStoreID, app-clip-bundle-id=appClipBundleID, app-clip-display=card">
App Clip is a relatively new form of App that has only been added to iOS in recent years. Its original design intention is to facilitate users to use App, enhance user participation experience, and ultimately achieve the purpose of increasing App conversion rate.
This article first analyzes what Clip is and why Clip is used. Finally, combined with the actual project developed by the company as an example, it shows that adding Clip to App is a method with high development efficiency and relatively low cost. In addition to completing the development of basic Clip functions, it also further improves the value of Clip from aspects such as user data continuity and additional live activity/dynamic island. The Clip we developed has received positive comments from users.
However, Clip development is very different from App development. This article discusses the experience from project establishment, development, configuration and post-testing methods, as well as some core logic codes. We hope to help developers successfully complete App Clip development through our experience.