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)
}
专注技术,懂的热爱,愿意分享,做个朋友
目录
相关文章
|
9天前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
137 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
2天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
21 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
1月前
|
安全 数据安全/隐私保护 Android开发
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
223 75
|
2天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
23 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
9天前
|
机器学习/深度学习 存储 人工智能
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
MNN-LLM App 是阿里巴巴基于 MNN-LLM 框架开发的 Android 应用,支持多模态交互、多种主流模型选择、离线运行及性能优化。
744 14
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
|
14天前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
111 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
12天前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
35 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
10天前
|
供应链 数据挖掘 API
1688APP 原数据 API 接口的开发、应用与收益
1688作为阿里巴巴旗下的B2B平台,汇聚海量供应商和商品资源。其APP原数据API接口为开发者提供获取商品详细信息的强大工具,涵盖商品标题、价格、图片等。通过注册开放平台账号、申请API权限并调用接口,开发者可构建比价工具、供应链管理及自动化上架工具等应用,提升用户体验与运营效率,创造新的商业模式。示例代码展示了如何使用Python调用API并解析返回结果。
61 8
|
28天前
|
JSON 小程序 UED
微信小程序 app.json 配置文件解析与应用
本文介绍了微信小程序中 `app.json` 配置文件的详细
132 12

热门文章

最新文章

  • 1
    MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
  • 2
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    微信小程序 app.json 配置文件解析与应用
  • 4
    【Azure App Service】基于Linux创建的App Service是否可以主动升级内置的Nginx版本呢?
  • 5
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 6
    【Azure Function】Function App出现System.IO.FileNotFoundException异常
  • 7
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
  • 8
    【Azure Logic App】使用MySQL 新增行触发器遇见错误 :“Unknown column 'created_at' in 'order clause'”
  • 9
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 10
    阿里云APP备案流程图以及备案所需材料整理,跟着教程一步步操作
  • 1
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    23
  • 2
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    21
  • 3
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    141
  • 4
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    223
  • 5
    app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
    87
  • 6
    深入探索iOS开发中的SwiftUI框架
    143
  • 7
    ios样式开关按钮jQuery插件
    58
  • 8
    Android与iOS生态差异深度剖析:技术架构、开发体验与市场影响####
    74
  • 9
    深入探索iOS与Android操作系统的安全性差异
    102
  • 10
    安卓与iOS开发中的跨平台策略:一次编码,多平台部署
    174