(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

アプリ内でのレビューをUnityで実装【Unity】【iOS】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 5.6.1f1
Xcode 8.3.2
iOS 10.3.1, 9.3.5, 8.0, 7.1.1


はじめに

iOS10.3からアプリ内でレビューを付けられるようになりました。


f:id:kan_kikuchi:20170610062217j:plain


しかも、この公式の機能以外で評価を促す事は禁止となるようです。

アプリ上で評価を促す際には、Appleが提供するAPIを使わなければいけなくなるそうです。


ということで今回は、アプリ内でのレビューをUnityで実装してみました!


ReviewManager

さっそくプログラムです。

ReviewManager.csがUnity側、ReviewPlugin.mmがiOS側のプログラムになります。



なお、ReviewManagerを使うにはSingletonMonoBehaviourが必要になります。





使い方

まず、ReviewPlugin.mmをPlugin/iOS、他のファイルを適当な場所に配置します。


f:id:kan_kikuchi:20170609065105p:plain


そして、ReviewPlugin.mmを選択し、

InspectorからStoreKitの項目にチェックを入れます。


f:id:kan_kikuchi:20170609065300j:plain


最後にReviewManagerを適当なオブジェクトにアタッチ、

InspectorからiOSとAndroidのIDを設定すれば準備完了です。


f:id:kan_kikuchi:20170609065614j:plain


あとはレビューを催促したい時に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など、

直接数字に変換できないバージョンを取得出来てしまうので注意が必要です。


おわりに

最初の方に書いた通り、今後はこの機能でないとレビューの催促ができなくなるので、

催促を出す場合は対応が必須となります。


また、アプリ内で気軽にレビュー出来るようになれば、

レビュー数は増えると思われるますが、

レビューのテキストは送信できないので、具体的な内容が聞けなくなる

点はマイナス要素かもしれません。