LoginSignup
9
9

More than 3 years have passed since last update.

新しいバージョンが利用可能になったことをユーザにお知らせする - Siren

Posted at

Siren とは?

アプリの新しいバージョンが利用可能になったことをユーザにお知らせアラートを表示するライブラリです。
本内容は Siren 5.2.1 をもとに記述しています。

skip

シンプルな実装

import Siren 後、Siren.shared.wail() を didFinishLaunchingWithOptions で呼び出すだけで動作します。

AppDelegate.swift
import Siren // Line 1
import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        window?.makeKeyAndVisible()
        Siren.shared.wail() // Line 2
        return true
    }
}

カスタマイズ

Siren の Manager を設定することで次のようなカスタマイズが可能です。

  • JP App Store でバージョンチェックしたい(デフォルトではUS)
  • バージョン(メジャー、マイナー、パッチ、リビジョン)毎に細かく表示を分けたい
  • アラートの表示頻度を変更したい(起動毎、日に1回、週に1回)
  • ユーザの選択肢を制限したい(強制アップデート、次回更新、このバージョンをスキップ)

JP App Store でバージョンチェックしたい

デフォルトでは US App Store に対してバージョンチェックを行います。
日本の App Store に対してバージョンチェックを行いたい場合は日本の App Store 向けに初期化したAPIManagerを用意します。

let siren = Siren.shared
siren.apiManager = APIManager.init(countryCode: "JP")

バージョン(メジャー、マイナー、パッチ、リビジョン)毎に細かく表示を分けたい

RulesManaer を設定してアラートを表示するルールをカスタマイズ出来ます。
メジャー、マイナー、パッチ、リビジョンなど全ての更新に個別のルールを設定出来ます。

// 起動ごとにアラート表示、強制アップデートのルール
let forceRules = Rules.init(promptFrequency: .immediately, forAlertType: .force)

// 1日1回アラート表示、アップデートのタイミングはユーザが選べるルール
let optionRules = Rules.init(promptFrequency: .daily, forAlertType: .option)

// メジャーバージョンが上がった場合は強制アップデート
// マイナーバージョン以下のアップデートの場合はユーザに選択可能とする
let siren = Siren.shared
siren.rulesManager = RulesManager(
    majorUpdateRules: forceRules,
    minorUpdateRules: optionRules,
    patchUpdateRules: optionRules,
    revisionUpdateRules: optionRules,
    showAlertAfterCurrentVersionHasBeenReleasedForDays: 1)
)

Rules

利用頻度が高そうなルールがあらかじめ用意されています。

Rule 説明
annoying アプリを起動するたびに表示
アプリの更新をスキップ可能
critical アプリを起動するたびに表示
アプリの更新を強制
default 日に1回表示
アプリの更新をスキップ可能
このバージョンをスキップも可能
hinting 週に1回表示
アプリの更新をスキップ可能
persistent 日に1回表示
アプリの更新をスキップ可能
relaxed 週に1回表示
アプリの更新をスキップ可能
このバージョンをスキップも可能
let siren = Siren.shared
siren.rulesManager = RulesManager(
    majorUpdateRules: .critical,
    minorUpdateRules: .default,
    patchUpdateRules: .default,
    revisionUpdateRules: .default,
    showAlertAfterCurrentVersionHasBeenReleasedForDays: 1)
)

独自 Rules

バージョンチェックの頻度やタイミング、ユーザへの選択肢を独自に設定することも可能です。
独自ルールで設定できる内容は下記の2つです。

promptFrequency

ユーザにアプリ更新を促す頻度です。

パラメタ 説明
immediately アプリを起動するたびに表示
daily 日に1回表示
weekly 週に1回表示

forAlertType

表示するアラートタイプです。ユーザが選べるボタンの数が変わります。

パラメタ 説明 アラート
force ユーザにアプリの更新を強制する force
option 今すぐアプリを更新するか、起動時に更新する
どちらかユーザが選択できる
option
skip ・今すぐアプリを更新する
・次回の起動時に更新する
・このバージョンはスキップする
の内からいずれかをユーザが選択できる
skip

releasedForDays

デフォルトでは更新アラートの表示を1日遅らせているそうです。
(showAlertAfterCurrentVersionHasBeenReleasedForDays: 1)
これは全ての地域の App Store CDN でバイナリが利用可能になる時間を待つためです。
通常、6〜24時間かかるため1日遅らせているようです。
showAlertAfterCurrentVersionHasBeenReleasedForDays に 0 を指定すると即時チェックとなりますがアラートが表示されるのに App Store にアップデートがまだ存在しない状況が発生する可能性があります。

Localization

デフォルトではアプリの言語設定に従ってメッセージが表示されます。
設定が存在しない場合は英語で表示されます。
SirenTest_xcodeproj.png
「設定 > 一般 > 言語と地域 > 使用言語」でメッセージが切り替わります。
Simulator Screen Shot - iPhone Xs - 2019-09-20 at 15.25.14.png Simulator Screen Shot - iPhone Xs - 2019-09-20 at 15.22.04.png

言語を強制したい場合

例えばどんな場合でも日本語で表示したい場合は PresentationManager を指定します。

siren.presentationManager = PresentationManager(forceLanguageLocalization: .japanese)

独自の文言で表示したい場合

あらかじめ用意されたメッセージではなくオリジナルな文言を用いたい場合も PresentationManager を設定します。
ボタンの文字色も変更できます。

        siren.presentationManager = PresentationManager(
            alertTintColor: UIColor.orange,
            appName: "アプリ名",
            alertTitle: "新しいバージョンがあります",
            alertMessage: "新バージョンではXXX機能がご利用頂けます",
            updateButtonTitle: "アップデートする",
            nextTimeButtonTitle: "今はしない",
            skipButtonTitle: "次のバージョンまで表示しない",
            forceLanguageLocalization: .japanese)

Simulator Screen Shot - iPhone Xs - 2019-09-20 at 15.50.03.png

オリジナルのメッセージには新しいバージョン番号が表示されていますが、独自の文言を設定する場合には新しいバージョン番号を差し込むことは今のところできません。

iOS13 対応

5.2.1 より古いバージョンでは、iOS13でダイアログが表示されてすぐ画面遷移してしまう不具合が発生していますので 5.2.1 以降へアップデートしましょう。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9