この記事でのバージョン
Unity 5.6.1f1
Xcode 8.3.2
iOS 10.3.1, 9.3.5, 8.0, 7.1.1
はじめに
iOS10.3からアプリ内でレビューを付けられるようになりました。
しかも、この公式の機能以外で評価を促す事は禁止となるようです。
アプリ上で評価を促す際には、Appleが提供するAPIを使わなければいけなくなるそうです。
ということで今回は、アプリ内でのレビューをUnityで実装してみました!
------------追記------------
Unityから直接iOSのアプリ内レビューが出来るようになりました。(Unity2017.3以降)
------------追記おわり------------
ReviewManager
さっそくプログラムです。
ReviewManager.csがUnity側、ReviewPlugin.mmがiOS側のプログラムになります。
なお、ReviewManagerを使うにはSingletonMonoBehaviourが必要になります。
使い方
まず、ReviewPlugin.mmをPlugin/iOS、他のファイルを適当な場所に配置します。
そして、ReviewPlugin.mmを選択し、
InspectorからStoreKitの項目にチェックを入れます。
最後にReviewManagerを適当なオブジェクトにアタッチ、
InspectorからiOSとAndroidのIDを設定すれば準備完了です。
あとはレビューを催促したい時にRequestReviewを実行するだけ。
ReviewManager.Instance.RequestReview();
ただし、iOS10.3未満やAndroidは直接ストアに飛ぶので、
事前に確認が必要になってくる点には注意が必要です。
なお、アプリ内レビューが可能かどうかはCanReviewInAppで取得できるので、
以下のような感じで対応可能です。
//アプリ内レビューが可能な時はそのままレビュー催促 if(ReviewManager.Instance.CanReviewInApp){ ReviewManager.Instance.RequestReview(); } //そうでない時は確認 else{ //レビューしますか?みたいなUIを表示 }
実装方法
今回の実装方法を掻い摘んでご紹介!
まず、アプリ内でのレビューに関するiOS側の実装は以下の一行だけ。
対応しているのはiOS10.3以上ですが、非対応の端末で実行しても特になにも起きません。
[SKStoreReviewController requestReview];
簡単なのは良いんですが、催促の文言は変更できませんし、
レビューされたか、キャンセルされたかなどのコールバックもないみたいです。
また、アプリ内レビューが出来るかどうか判定するため、
iOSのバージョンをネイティヴプラグインを通じて取得しています。
//Unity側 float iosVersion = _GetiOSVersion(); _canReviewInApp = iosVersion >= 10.3f;
//iOS側 float _GetiOSVersion(){ return [[[UIDevice currentDevice] systemVersion] floatValue]; }
なお、OSのバージョンはSystemInfo.operatingSystemを使う事でUnity側だけで取得も可能です。
ただし、その場合はiOSやiPhoneなど余計な文字列が付いてたり、10.3.1など、
直接数字に変換できないバージョンを取得出来てしまうので注意が必要です。
おわりに
最初の方に書いた通り、今後はこの機能でないとレビューの催促ができなくなるので、
催促を出す場合は対応が必須となります。
また、アプリ内で気軽にレビュー出来るようになれば、
レビュー数は増えると思われるますが、
レビューのテキストは送信できないので、具体的な内容が聞けなくなる
点はマイナス要素かもしれません。