App Store の予約注文とは
App Store でアプリの予約注文機能が提供されました!
Offering Your Apps for Pre-Order - App Store - Apple Developer
ザッと翻訳してまとめたので
もし間違いなどがあればご指摘いただけると助かります m(_ _)m
概要
iTunes Connect でレビュー用のアプリとメタデータを送信すると、
すべてのAppleプラットフォーム上で予約注文を利用できるようになります。
リリース日は2日〜90日後を選択することができます。
アプリがリリースされるとユーザに通知され、24時間以内に自動的にダウンロードされます。
対象のアプリ
App Store で公開されたことのない新しいアプリは、予約注文の対象となります。
既に公開されたことがあるアプリ(他の国などを含む)は予約注文の対象外となります。
プロダクトページ
アプリの予約注文が可能になると、リリース予定日が表示された限定ページが App Store で公開されます。
App内課金を提供するアプリの場合は、事前予約中はApp内課金のプロモーションは表示されません。
ユーザからはどう見えるか
ユーザはプロダクトページ、検索結果からアプリを予約注文することができます。
また、アプリがフィーチャーされていれば Today, ゲーム, アプリタブからも予約注文することができます。
リリース日に予約注文をリクエストしたデバイスと
自動ダウンロードが有効になっている他のデバイスに自動的にダウンロードされます。
また、アプリが利用可能になったお知らせが通知されます。
有料アプリを先行予約したユーザは、アプリがリリースされるまでは請求されません。
アプリの価格が事前予約中に変更された場合は、予約注文時の価格とリリース時の価格の安い方の価格が適用されます。
ユーザは App Store の設定や iTunes の設定から予約注文をキャンセルすることができます。
予約注文は iOS 11.2, tvOS 11.2, macOS 10.13.2以降の端末でおこなうことができます。
予約注文のプロダクトページは上記以前のOSを利用しているユーザでも、リンクからアクセスすることができます。
ただし、購入ボタンは無効になっており、最新のOSバージョンにアップデートしてアプリを予約注文するように促されます。
事前予約のレポート
Sales and Trends からアプリの予約注文の掲載結果をトラッキングできます。
そこで 注文済み、キャンセル済み、ネット予約済の注文数を確認できます。
マーケティング
Webサイト、メーリングリスト、SNSアカウントなどのマーケティングチャネルを使用して、
閲覧者が App Store にアクセスしてアプリを予約注文できるようにします。
たとえば、「App Storeで先行予約」など明確な行動を促すフレーズを含めて、プロダクトページへの直接リンクを提供します。
プロダクトページにリリース予定日が表示されますが、この日付が変更される可能性がある場合はアナウンスすることをおすすめします。
アプリを事前予約しているユーザには、Appleからは日付の変更が通知されないので、この変更を伝える必要があります。
同様に AppStoreから予約注文を削除する必要がある場合は、ユーザに知らせるメッセージングを準備する必要があります。
リリース日にマーケティング資料をすべて更新し、AppStoreのダウンロードバッジを更新しましょう。
ダウンロードバッジについてはこちら
iOSエンジニアが教える "iOS11の便利機能" 5選!
この記事は Relux Advent Calendar 2017 9日目の記事です。
iOS11の機能をきちんと使いこなせていますか?
iOSには便利なのに意外に知られていない機能がたくさんあります。
その中からiOSエンジニアの僕がおすすめする便利機能を5つ紹介します。
- 1. QRコード読み取り機能(カメラ)
- 2. Webページ内のQRコード読み取り機能(Safari)
- 3. 書類スキャン機能(メモ)
- 4. 画面収録機能
- 5. AssistiveTouch機能
- 最後に
※お使いの端末によって一部使えない機能もあります。
1. QRコード読み取り機能(カメラ)
最初にご紹介するのは QRコード読取り機能 です。
こちらは有名なので知っている方も多いと思います。
標準のカメラアプリでQRコードを読み取ることができます。
iOS10以前はサードパーティ製のアプリが必要でしたが、iOS11ではアンインストールしてしまっても問題ありません。
QRコードを認識するとこのようにバナーが表示され、タップするとリンクを開くことができます。
2. Webページ内のQRコード読み取り機能(Safari)
次にご紹介するのは Webページ内のQRコード読取り機能 です。
SafariでWebページ内に設置されているQRコード画像からリンクを開くことができます。
あまり使うタイミングはありませんが知っておいて損はないと思います!
QRコード画像を 3D Touch することでメニューが表示されます。
今すぐ試したい方は↓こちらの画像でお試しください。
※こちらのリンクはRelux LINEアカウントのリンクになります。
3. 書類スキャン機能(メモ)
3つ目ご紹介するのは 書類スキャン機能 です。
標準のメモアプリで書類をスキャンすることができます。
タブバーの+ボタンをタップするとメニューが表示されます。
書類をスキャンをタップするとカメラが起動し、スキャンが開始されます。
書類はカメラで認識されると黄色いガイドが表示され、自動的にスキャンしてくれます。
(自動的にスキャンされるのでスクリーンショットの撮影に少し苦労しました 笑)
スキャンが完了すると角度を自動的に補正してくれます。
結構綺麗にスキャンされるのでぜひ試してみてください。
4. 画面収録機能
次にご紹介するのは 画面収録機能 です。
iPhoneの操作を動画として保存することができます。ファイル形式は mov ではなく mp4 でした。
コントロールセンターをカスタマイズして、画面収録機能を追加することができます。
5. AssistiveTouch機能
最後にご紹介するのは Assitive Touch機能 です。
こちらは以前から存在する機能ですが、使いやすくパワーアップしているのでご紹介します!
AssistiveTouchとは?
画面上に丸いメニューを表示させ、複雑な操作をかんたんに行えるようにサポートする機能です。
iPhoneの基本的な操作だけでなく、カスタムジェスチャーを登録して利用することができます。
ホームボタンの効きがわるくなったときに使っていた方も多いのではないでしょうか?
AssistiveTouchの設定方法
設定 > 一般 > アクセシビリティ > AssistiveTouch
から設定することができます。
最上位メニューのカスタマイズ
カスタムアクションで「メニューを開く」を設定した場合に表示されるメニューです。
最大で8個のアクションを設定することができます。
カスタムを選択すると登録したジェスチャーを実行することができます。
メニューを開いてからアクションを選択する必要があるので、使用頻度があまり高くないものを設定するのがおすすめです。
カスタムアクション
- シングルタップ
- ダブルタップ
- 長押し
- 3D Touch
にそれぞれにアクションを設定することができます。
最上位メニューを使用したい場合は「メニューを開く」をどれかに割り当てないと機能しません。
カメラアプリなどをここに登録できたら便利だと思うのですができないようです。(Appleさんお願いします🙏)
待機状態時の不透明度
Assistive Touchの不透明度を設定することができます。
15%から100%まで設定することができます。100%だとかなり目立ってしまいますが、15%に設定するとあまり目立たなく気になりません。個人的には30%ぐらいがちょうど良いと思います。
おすすめ設定
- シングルタップ → 通知
よく使うアクションをシングルタップに登録するのがおすすめです。
中でもおすすめなのが通知です。通知は画面上端からスワイプする必要がありますが、シングルタップに登録することでワンタップで通知をひらくことができるようになります。
- ダブルタップ → コントロールセンター
こちらもシングルタップと同様によく使うアクションを登録するのがおすすめです。
特に iPhoneX ユーザの方はコントロールセンターがおすすめです。
この機能に気づくまでは両手で操作していたのですが Assistive Touch を使うようになってからは片手で操作できるようになりました。
- 長押し → メニューを開く / スクリーンショット
長押しのみ継続時間(アクションするまでの時間)を設定することができます。
時間は0.2秒から8.0秒まで設定することができます。継続時間を長くしてSOSを設定するのも良いかもしれません。
最上位メニューを使用したい方は長押しに
メニューを開くを設定するのがおすすめです。直感的な操作でメニューを開くことができます。
最上位メニューを使わない方にはスクリーンショットを設定するのがおすすめです。
スクリーンショットは2つのボタンを同時に操作する必要があります。
操作ミスでスクリーンショットがうまく撮影できなかったなんてことはありませんか?
Assistive Touchに設定すれば簡単に撮影することができます。
シングルタップやダブルタップなどに設定すると誤操作してしまうことがありますが
長押しに設定すれば誤操作する心配はほとんどありません。
- 3DTouch → 画面向きのロック
3D Touch は 画面向きのロック がおすすめです。ここにスクリーンショットを設定するのも良いと思います。
画面向きのロックは長押しが良いかと思ったのですが、操作時のフィードバックがなく切り替わったかどうかがわかりにくいです。
3D Touch であればアクション時に振動するので切り替わったことがすぐにわかります。
最後に
iOS11のおすすめ機能を5つ紹介しました。いかがでしたか?
他にもたくさん便利な機能があるので ヒントアプリ や Appleサポートアプリ をチェックしてみてください!
AppStore の Today タブに Relux のストーリーが掲載されました!
Today
本日 AppStoreJP のTodayタブで「Relux」のストーリーが掲載されました。
iOS11の新しいAppStoreからぜひご覧ください!
理想の宿を見つけよう:App Store ストーリー
旅行カテゴリ ランキング
2017年12月07日 19:30追記
旅行カテゴリ ランキング
無料 App 1位になりました!
ストーリーでも紹介されている「テーマ別まとめ」は眺めているだけでも楽しいです。
ダウンロードして触ってみてください!
Firebase Remote Configを利用して強制アップデートをおこなう
この記事は Relux Advent Calendar 2017 2日目の記事です。
Firebase Remote Config を利用して強制アップデートをおこなう方法について書きます。
qiita.com
強制アップデートとは?
上記画像のようにアラートでアップデートを促すものです。
アラートを閉じるボタンは存在せず、更新ボタンを押すと強制的にAppStoreへ遷移します。
ReluxではAPIのレスポンスが大幅に変更なった場合や
致命的な不具合を含んだバージョンからアップデートさせたい場合に利用しています。
ライブラリ
こちらのライブラリを利用することで強制アップデートを簡単に実装することができます。
Reluxでもこちらで強制アップデートをおこなっていたのですが、現在は Firebase Remote Config でおこなうようにしています。
なぜライブラリを使用しないのか?
ライブラリは端末にインストールされているバージョンとAppStoreのバージョンとを比較し、事前に指定したルールで強制アップデートを表示する仕組みになっています。
例えばメジャーバージョンの変更があった場合にのみアラートを表示する といったことが可能です。
この方法では運用上でいくつか問題が発生しました。
- 強制アップデートを実施したバージョンで不具合が発生した場合に、強制アップデートを取り消すことができない。
- 事前に指定したルール以外で強制アップデートすることができない。
- エンジニア以外でも強制アップデートの開始・停止をできるようにしたい。
- 一部のユーザのみ強制アップデートさせ、段階的に強制アップデートをおこないたい。
上記を考慮してエンジニア以外でも簡単に操作することができる Firease Remote Config を採用しました。
どうやってやるのか?
1. パラメータの追加
Firebase Remote Config で強制アップデートに使用するパラメータを追加します。
キー名は「force_update_for_ios_app」とし、値は「3.11.0」としました。
ここで指定したバージョンよりも古い場合のみ強制アップデートを表示するようにします。
パラメータの取得に関しては公式ドキュメントを参照
Firebase Remote Config を iOS で使用する | Firebase
2. バージョンの判定
バージョンの判定は以下のように行います。
trueの場合に強制アップデートのアラートを表示します。
NSString *targetVersion = self.firRemoteConfig[@"force_update_for_ios_app"].stringValue; if ([installedVersion compare:targetVersion options:NSNumericSearch] == NSOrderedAscending) { return true; } return false;
3. アラートの表示
アラートは通常のものと同様に UIAlertController を使用します。
更新ボタンを押したときの遷移先はAppStore(
https://itunes.apple.com/app/id843104033
)にします。
NSURL *iTunesURL = [NSURL URLWithString:@"https://itunes.apple.com/app/id843104033"]; dispatch_async(dispatch_get_main_queue(), ^{ [[UIApplication sharedApplication] openURL:iTunesURL]; });
これで実装は完了です。
4. 強制アップデートの実施
強制アップデートは 1. で設定したバージョンを変更するだけでおこなうことができます。
逆に停止する場合はもとの値に戻すだけで問題ありません。
AppStoreの反映は最大で24時間かかると公式サイトには書かれていますが、反映に1週間近くかかることがありました。
強制アップデートを実施する場合は余裕があればリリース直後ではなく、しばらく経ってからおこなうのが良さそうです。
developer.apple.com
今後やっていきたいこと
現在はバージョンのみを指定して強制アップデートのアラートを表示していますが、
今後はアラートに表示する文言なども、Remote Config で設定できるようにしたいと考えています!
本来はA/Bテストなどをおこなうためのツールですが、他のものにも色々と応用できそうでした。
iPhoneXに対応しました!
ReluxをiPhoneXに対応しました!
発売前に対応は完了していたのですが...時間がとれず...(反省)
そしてAppタブの「iPhoneXにおすすめ」に掲載してただきました🎉
iPhoneX対応についてはいくつか記事があがっていますが、同じようにReluxでやったことについて書きたいと思います。載せているスクリーンショットはクリックで拡大することができます。拡大すると蟹が食べたくなるかも...
iPhoneX対応
セーフエリア
セーフエリアとは
アプリのコンテンツやUIが正しく表示され、操作しやすいように安全な領域(セーフエリア)が新たに設けられています。セーフエリアはAutoLayoutに対応していれば簡単に対応することができます!
画面上部の扱い
セーフエリアに基づいてステータスバーに自動的にスペースが挿入されます。
ステータスバーの高さを20pxとして扱っているアプリは、レイアウト崩れなどが発生する可能性があります。
丸みを帯びたディスプレイになったのでコンテンツやUIをコーナーに配置してはいけません。また、センサーハウジング(切り欠き部分)にもかぶらないように配置する必要があります。
画面下部の扱い
ホームインジケータに干渉しないようにする必要があります。
特に画面下部に固定するようなUIは特に注意です。
Storyboardでセーフエリアを有効にする
User Safe Area Layout Guides にチェックをいれることで有効になります。
有効にするとUILayoutGuideが追加されます。
ソースコード上からセーフエリアを取得する
safeAreaInsetsを使用します。
UIView の layoutSubviews もしくは UIViewController の viewWillLayoutSubviews で正しい値が取得できます。
参考記事
qiita.com
Swiftの場合
override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() if #available(iOS 11.0, *) { let safeAreaInsets: UIEdgeInsets = view.safeAreaInsets } }
Objective-Cの場合
- (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; if (@available(iOS 11.0, *)) { UIEdgeInsets safeAreaInsets = self.view.safeAreaInsets; } }
スクリーンエッジジェスチャー
iPhoneXではスクリーンエッジジェスチャーで様々なことができます。
- ホームスクリーンに戻る
- アプリスイッチャー
- 通知センター
- コントロールセンター
この操作と干渉しないようにする必要があります。
干渉してしまう場合はエッジプロテクトを使用します。
エッジプロテクトを使用すると
1回目にアプリ固有のジェスチャーが呼び出され、
2回目にシステムジェスチャーが呼び出されます。
Swiftの場合
override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge { return .bottom }
Objective-Cの場合
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures { return UIRectEdgeBottom; }
Reluxではセレクションズ(テーマ別まとめ)、人気宿ランキングでエッジプロテクトを使用しています。
Reluxで対応した内容は以上になります。
iPhoneXの画面いっぱに表示される写真が綺麗なので
ぜひダウンロードして触ってみてください🙏
iOS11の Password AutoFill に対応してみた
iOS11がリリースされましたね!
アプリの審査がかなりギリギリでしたが、対応したものをリリースすることができました 笑
今回はPassword AutoFillについて書きたいと思います。
Password AutoFillとは?
Password AutoFillはiOS11のあたらしい機能で、
iCloud Keychainに保存されたアカウント/パスワードをアプリ上で自動入力することができます。
保存されたアカウント/パスワードはiOSの設定画面から閲覧、編集することができます。
また、新しく追加することも可能です。
設定 > アカウントとパスワード > AppとWebサイトのパスワード
Password AutoFillが有効な条件
対応方法 アプリ編
1. TextFieldのContentTypeにUsernameとPasswordを設定する
Swift
if #available(iOS 11.0, *) { usernameTextField.textContentType = UITextContentType.username passwordTextField.textContentType = UITextContentType.password }
if (@available(iOS 11.0, *)) { [usernameTextField setContentType:UITextContentTypeUsername]; [passwordTextField setContentType:UITextContentTypePassword]; }
※StoryboardからContentTypeを設定することもできます。
2. Associated Domainsを有効化する
https://developer.apple.com/account/ios/identifier/bundle
※Universal Linksなどに対応していれば対応済のはずです。
対応方法 サーバ編
実機での動作
TextContentTypeが設定されているTextFieldにフォーカスがあたると鍵アイコンが表示されます。
このアイコンをタップすることでTextFieldにアカウント/パスワードを自動入力することができます。
iOS11の Password AutoFill は工数をあまりかけずに対応することができます!
ちょっとしたことですが、メールアドレスやパスワードを入力しなくても済むようになるので
ユーザの離脱率の改善にもなりそうです。ログイン機能がある場合はぜひ実装してみてください。
Firebase Performance Monitoring を導入してみた
前回の記事から少し間があいてしまいましたが
Firebase Performance Monitoringを導入しました!
β版ですが十分つかえるレベルだと思います。
Firebase Performance Monitoring とは?
アプリの起動時間、ネットワークリクエストなどのパフォーマンス情報を自動的に測定し、Firebaseコンソール上で確認することができるようになります。
アプリのパフォーマンスで問題がある部分を把握するのに役立つサービスです。
導入方法
Firebaseを導入済であればかなり簡単に導入することができます。
0. 前提条件
- Xcode8.2.1以降
- iOS8以上をターゲットとするXcodeプロジェクト
- CocoaPods 1.0.0以降
1. Podfileの編集
pod 'Firebase/Performance'
2. インストール
pod update
3. コードの変更
// Objective-C @import <Firebase.h> [FIRApp configure];
ハマったところ
インストール時にこのようなエラーがでて焦りました。
[!] Unable to satisfy the following requirements: - `Firebase/Performance` required by `Podfile` Specs satisfying the `Firebase/Performance` dependency were found, but they required a higher minimum deployment target.
すぐに気づいたのですが update せずに install しており
Firebase/Coreが古いバージョンでロックされていました。
Firebase Remote Configをつかって有効/無効を切替え
公式サイトにもやり方が掲載されています。
Peformance Monitoring はβ版なので切替えられるようにしておいたほうが良さそうです。
Disable the Firebase Performance Monitoring SDK | Firebase
1. コードの変更
公式とは違うのですがこのように設定しました。
if (self.remoteConfig[@"performance_enable"].numberValue.boolValue) { [FIRPerformance sharedInstance].instrumentationEnabled = YES; [FIRPerformance sharedInstance].dataCollectionEnabled = YES; } else { [FIRPerformance sharedInstance].instrumentationEnabled = NO; [FIRPerformance sharedInstance].dataCollectionEnabled = NO; }
2. Firebase Remote Configの設定
Firebaseコンソール上ではこのようになっています。
値を0に変更することで無効化できます。
また、この設定自体を誤って消してしまった場合にも無効になります。