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)
}
专注技术,懂的热爱,愿意分享,做个朋友
目录
相关文章
|
29天前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
115 4
|
2月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
3天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
27 6
|
26天前
|
传感器 iOS开发 UED
探索iOS生态系统:从App Store优化到用户体验提升
本文旨在深入探讨iOS生态系统的多个方面,特别是如何通过App Store优化(ASO)和改进用户体验来提升应用的市场表现。不同于常规摘要仅概述文章内容的方式,我们将直接进入主题,首先介绍ASO的重要性及其对开发者的意义;接着分析当前iOS平台上用户行为的变化趋势以及这些变化如何影响应用程序的设计思路;最后提出几点实用建议帮助开发者更好地适应市场环境,增强自身竞争力。
|
1月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
30 2
|
1月前
|
设计模式 Swift iOS开发
探索iOS开发:从基础到高级,打造你的第一款App
【10月更文挑战第40天】在这个数字时代,掌握移动应用开发已成为许多技术爱好者的梦想。本文将带你走进iOS开发的世界,从最基础的概念出发,逐步深入到高级功能实现,最终指导你完成自己的第一款App。无论你是编程新手还是有志于扩展技能的开发者,这篇文章都将为你提供一条清晰的学习路径。让我们一起开始这段旅程吧!
|
1月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
1月前
|
JSON 前端开发 API
探索iOS开发之旅:打造你的第一个天气应用
【10月更文挑战第36天】在这篇文章中,我们将踏上一段激动人心的旅程,一起构建属于我们自己的iOS天气应用。通过这个实战项目,你将学习到如何从零开始搭建一个iOS应用,掌握基本的用户界面设计、网络请求处理以及数据解析等核心技能。无论你是编程新手还是希望扩展你的iOS开发技能,这个项目都将为你提供宝贵的实践经验。准备好了吗?让我们开始吧!
|
1月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
57 1
|
2月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
【10月更文挑战第18天】本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户按下按钮时,按钮将从圆形变为椭圆形并从蓝色渐变为绿色;释放按钮时,动画恢复原状。通过UIView的动画方法和弹簧动画效果,实现平滑自然的动画过渡。
60 5