StoreKit:iOS应用内推广其他App

简介: 在iOS应用中,要推广其他App有两种途径,一种是直接跳转到AppStore软件的对应App商品页,还有一种是在当前应用内内嵌一个App商品页。相比第一种方式,第二种方式的体验更好,并且不会打断用户对当前应用的使用。

StoreKit:iOS应用内推广其他App

在iOS应用中,要推广其他App有两种途径,一种是直接跳转到AppStore软件的对应App商品页,还有一种是在当前应用内内嵌一个App商品页。相比第一种方式,第二种方式的体验更好,并且不会打断用户对当前应用的使用。

本篇文章,我们主要介绍StoreKit框架中的相关接口,使用StoreKit可以轻松的在当前应用内推广其他App。

· 在应用内打开其他App的商品页

StoreKit框架中提供了一个名为SKStoreProductViewController的类,此类事继承自UIViewController的,因此我们可以像使用普通视频控制器一样来使用它。只要我们提供了某个应用的ITunes ID,就可以轻松的在应用中打开其AppStore商品页。

例如下面的代码:

// 创建视图控制器
let appStoreController = SKStoreProductViewController()
// 设置代理
appStoreController.delegate = self
// 定义参数
let params = [SKStoreProductParameterITunesItemIdentifier: "387682726"]
// 加载应用信息
appStoreController.loadProduct(withParameters: params)
// 将页面弹出
self.present(appStoreController, animated: true)

上面代码中使用了淘宝应用的ITunes ID,代码执行效果如下图所示:

可以看到,我们直接在应用内就弹起了”淘宝“的详情页,可以直接进行下载/更新操作。

需要注意,上面代码只能在真机上进行测试,且默认页面的弹出方式为浮层样式。

下面我们再来详细看下SKStoreProductViewController这个类的用法,SKStoreProductViewController本身比较简单,创建出实例后,只需要使用loadProduct来加载指定的应用即可,其所传的参数字典中,可配置的选项如下:

// 应用的iTunes ID 
@available(iOS 6.0, *)
public let SKStoreProductParameterITunesItemIdentifier: String

// 内购商品的SKU码,如果配置了,则会显示内购商品信息 
@available(iOS 11.0, *)
public let SKStoreProductParameterProductIdentifier: String

// 自定义商品页的ID
@available(iOS 15.0, *)
public let SKStoreProductParameterCustomProductPageIdentifier: String

// 机构token
@available(iOS 8.0, *)
public let SKStoreProductParameterAffiliateToken: String
@available(iOS 8.0, *)
public let SKStoreProductParameterCampaignToken: String

// 用来分析提供者的token
@available(iOS 8.3, *)
public let SKStoreProductParameterProviderToken: String

// 广告伙伴token
@available(iOS 9.3, *)
public let SKStoreProductParameterAdvertisingPartnerToken: String

其中,SKStoreProductParameterITunesItemIdentifier键是必传的。

SKStoreProductViewController中也定义了一个delegate属性,设置代理可以对商品页的关闭行为进行监听,如下:

extension ViewController: SKStoreProductViewControllerDelegate {
    func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) {
        print("商品页关闭")
    }
}

此代理方法是可选实现的。

· 一些小技巧

如何获取公开应用的ITunes ID?

现在,我们以及知道了如何在应用内打开其他App的详情页,如何获取ITunes参数呢,其实是有官方的渠道可查的。

在其中输入我们要查询的应用名称,即可获取到与此应用相关的推广信息,如下图所示:

可以看到,图中有一段Content Link,这其中就包含了应用的ITunes ID信息,只是其是被URL encode后的,将其复制出来,可以在如下网站进行URL Decode,即可得到原始的ITunes ID。

http://www.jsons.cn/urlencode/

对内嵌商品页弹起的高度,文本风格颜色进行配置?

虽然SKStoreProductViewController提供的接口很少,但我们依然有办法对其做一定程度上的定制,比如其中按钮的风格颜色,浮层的弹起高度。

新建一个继承于SKStoreProductViewController的类,实现如下:

import UIKit
import StoreKit

class MyStoreProductController: SKStoreProductViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 设置页面内部分元素的风格颜色
        view.tintColor = .red
    }

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        // 这里可以控制页面弹起的高度
        view.frame = CGRect(x: 0, y: 400, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height - 400)
    }
}

运行效果如下图所示:

· 使用应用挂件

SKStoreProductViewController打开的是一个完整的产品详情页,有时候,我们更期望要推广的应用只是占据一个挂件的位置,在iOS 14及之后的版本中,StoreKit框架中提供了SKOverlay类来实现应用挂件。

示例代码如下:

// 创建配置,传入要渲染的应用的ITunes ID
let config = SKOverlay.AppConfiguration(appIdentifier: "387682726", position: .bottom)
let overlay = SKOverlay(configuration: config)
// 指定展示在Scene上
if let scene = UIApplication.shared.windows.first?.windowScene {
    overlay.present(in: scene)
}

效果如下图所示:

可以看到,在窗口底部会出现一个应用挂件。

AppConfiguration实例可配置的属性不多,列举如下:

@available(iOS 14.0, *)
public class AppConfiguration : SKOverlay.Configuration {
    // 初始化方法
    public init(appIdentifier: String, position: SKOverlay.Position)

    // ITunes ID
    open var appIdentifier: String

    // 一些额外的Token
    open var campaignToken: String?
    open var providerToken: String?

    // 自定义页面的ID
    @available(iOS 15.0, *)
    open var customProductPageIdentifier: String?
  
    // 设置要展示最近版本
    @available(iOS 15.0, *)
    open var latestReleaseID: String?

    // 挂件的位置,可枚举bottom和bottomRaised 差别不大
    open var position: SKOverlay.Position

    // 是否允许用户关闭
    open var userDismissible: Bool

    // 启动附加数据    
    open func setAdditionalValue(_ value: Any?, forKey key: String)
    open func additionalValue(forKey key: String) -> Any?

    // 广告体验配置
    @available(iOS 16.0, *)
    open func setAdImpression(_ impression: SKAdImpression)
}

整体来说,SKOverlay不太灵活,对其出现的位置并不能精准的进行控制,SKOverlayDelegate定义了一些方法来监听其行为,如下:

public protocol SKOverlayDelegate : NSObjectProtocol {
    // 产品加载失败的回调    
    optional func storeOverlayDidFailToLoad(_ overlay: SKOverlay, error: Error)
    // 挂件将要开始弹出的回调
    optional func storeOverlayWillStartPresentation(_ overlay: SKOverlay, transitionContext: SKOverlay.TransitionContext)
    // 挂件以及弹出的回调
    optional func storeOverlayDidFinishPresentation(_ overlay: SKOverlay, transitionContext: SKOverlay.TransitionContext)
    // 挂件将要消失的回调
    optional func storeOverlayWillStartDismissal(_ overlay: SKOverlay, transitionContext: SKOverlay.TransitionContext)
    // 挂件已经消失的回调
    optional func storeOverlayDidFinishDismissal(_ overlay: SKOverlay, transitionContext: SKOverlay.TransitionContext)
}
专注技术,懂的热爱,愿意分享,做个朋友
目录
相关文章
|
21天前
|
搜索推荐 API 开发工具
打造个性化天气应用:从零开始的iOS开发之旅
【8月更文挑战第31天】本文是一篇针对初学者的iOS应用开发指南,将引导读者通过Swift和iOS SDK构建一个简单而美观的天气应用。我们将探索如何利用API获取实时天气数据,并在应用中实现用户友好的界面设计。文章不仅包括代码示例,还提供了设计理念和用户体验优化的建议,旨在帮助初学者理解iOS开发的基础知识,并激发他们创造个性化应用的兴趣。
|
10天前
|
开发框架 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的指南
在移动应用开发的广阔天地中,安卓与iOS两大平台各占半壁江山。本文将深入浅出地对比这两大操作系统的开发环境、工具和用户体验设计,揭示它们在编程语言、开发工具以及市场定位上的根本差异。我们将从开发者的视角出发,逐步剖析如何根据项目需求和目标受众选择适合的平台,同时探讨跨平台开发框架的利与弊,为那些立志于打造下一个热门应用的开发者提供一份实用的指南。
26 5
|
16天前
|
Swift iOS开发 UED
揭秘一款iOS应用中令人惊叹的自定义动画效果,带你领略编程艺术的魅力所在!
【9月更文挑战第5天】本文通过具体案例介绍如何在iOS应用中使用Swift与UIKit实现自定义按钮动画,当用户点击按钮时,按钮将从圆形变为椭圆形并从蓝色渐变到绿色,释放后恢复原状。文中详细展示了代码实现过程及动画平滑过渡的技巧,帮助读者提升应用的视觉体验与特色。
36 11
|
20天前
|
API iOS开发
探索iOS开发:打造你的第一个天气应用
【8月更文挑战第31天】 在这篇文章中,我们将一起潜入iOS开发的海洋,从初学者的角度出发,一步步构建我们自己的天气应用。通过实际的项目实践,你将学习到如何获取网络数据、如何在界面上展示这些数据,以及如何处理用户交互。文章以通俗易懂的语言,结合代码示例,引导你理解并实现一个简单天气应用的核心功能。无论你是编程新手还是希望扩展你的iOS开发技能,这篇文章都将为你提供宝贵的指导和启发。
|
20天前
|
存储 JSON API
探索iOS开发:打造你的第一个天气应用
【8月更文挑战第31天】在这篇文章中,我们将踏上一段激动人心的旅程,从零开始构建一个iOS天气应用。通过这一过程,我们不仅能够掌握Swift编程语言的核心概念,还能深入理解如何与API进行交互以及如何在App Store上发布我们的杰作。无论你是编程新手还是希望扩展你的技能库,这个项目都将为你提供一个实践的平台。让我们携手进入iOS开发的奇妙世界,一步步实现自己的想法,并最终将它们变为现实。
|
12天前
|
开发工具 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的关键考量
在数字时代的浪潮中,安卓和iOS这两大操作系统如同双子星座般耀眼夺目,引领着移动应用的潮流。它们各自拥有独特的魅力和深厚的用户基础,为开发者提供了广阔的舞台。然而,正如每枚硬币都有两面,安卓与iOS在开发过程中也展现出了截然不同的特性。本文将深入剖析这两者在开发环境、编程语言、用户体验设计等方面的显著差异,并探讨如何根据目标受众和项目需求做出明智的选择。无论你是初涉移动应用开发的新手,还是寻求拓展技能边界的资深开发者,这篇文章都将为你提供宝贵的见解和实用的建议,帮助你在安卓与iOS的开发之路上更加从容自信地前行。
|
20天前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
80 0
|
20天前
|
JSON API 定位技术
探索iOS开发之旅:打造你的第一个天气应用
【8月更文挑战第31天】 在这篇文章中,我们将一起踏上iOS开发的冒险旅程,学习如何从零开始构建一个简单的天气应用。通过实际操作和代码示例,你将了解到如何在Xcode中设置项目、使用Swift语言编写代码、以及接入第三方API来获取实时天气数据。无论你是刚入门的新手还是想扩展知识的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
20天前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
46 0
|
20天前
|
存储 搜索推荐 IDE
打造个人iOS记事本应用:从零开始
【8月更文挑战第31天】 在这篇文章中,我们将一起探索如何构建一个简单但功能齐全的iOS记事本应用。通过逐步引导,你将学会如何使用Swift语言和Xcode工具,从设计界面到实现数据存储,再到部署到设备上的每一个细节。无论你是编程新手还是希望拓展你的iOS开发技能,这篇文章都将为你提供一个实际操作的机会,让你能够动手实践并见证自己作品的诞生。