expoで位置情報、カメラ写真、通知の許可を取るアラート文を変更する方法【iOS】
expoで位置情報、カメラ、写真ライブラリ、通知の許可を出すためには次のようなモーダルを出すと思います。
そうすると、ユーザーに使用許可を求めるようなモーダルがでます。
この文章は規定は英語のままです。
この英語のままだと、Appleの審査で「primary言語を日本語にしている場合に」引っかかってしまいます。
今回は、このアラートの文字を英語から日本語にする方法を解説します。
目次(クリックで読みたい部分にジャンプできます)
【確認】それぞれのモーダルの出し方
まず、どのようにしてモーダルを出しているかについて確認します。
(それぞれのモーダルの出し方について知っている方は、この章は読み飛ばしてください)
今回は、以下の4つのパターンで出すモーダルについて確認します。
位置情報の許可リクエスト
位置情報を確認するには、expo-locationを使用します。
statusで許可しているかどうかを判定します。
公式ドキュメント:Location - Expo Documentation
import * as Location from 'expo-location';
async function requestLocationPermission() {
let { status } = await Location.requestForegroundPermissionsAsync();
if (status !== 'granted') {
// ユーザーが許可しなかった場合の処理
console.log('Permission to access location was denied');
return;
}
// ここで位置情報を取得する処理を実行
}
カメラの使用許可リクエスト
カメラの使用許可は、expo-image-pickerを使用します。
公式ドキュメント:ImagePicker - Expo Documentation
import * as ImagePicker from 'expo-image-picker';
async function requestCameraPermission() {
let { status } = await ImagePicker.requestCameraPermissionsAsync();
if (status !== 'granted') {
// ユーザーが許可しなかった場合の処理
console.log('Permission to access camera was denied');
return;
}
// ここでカメラを使用する処理を実行
}
写真ライブラリへのアクセス許可リクエスト
写真ライブラリへのアクセス許可リクエストでも、カメラと同様にexpo-image-pickerを使用します。
async function requestPhotoLibraryPermission() {
let { status } = await ImagePicker.requestMediaLibraryPermissionsAsync();
if (status !== 'granted') {
// ユーザーが許可しなかった場合の処理
console.log('Permission to access photo library was denied');
return;
}
// ここで写真ライブラリを使用する処理を実行
}
通知の許可リクエスト
通知の許可には、expo-notificationを使用して出します。
公式ドキュメント:Notifications - Expo Documentation
import * as Notifications from 'expo-notifications';
async function requestNotificationPermission() {
let { status } = await Notifications.requestPermissionsAsync();
if (status !== 'granted') {
// ユーザーが許可しなかった場合の処理
console.log('Permission for notifications was denied');
return;
}
// ここで通知の設定を行う
}
これらのコードを使用すれば、ユーザーに各機能の使用許可を得ることができます。
しかし、このコードのみだとユーザーには既定の文面を出すことになり意図していない文面が出される可能性があります。
また、モーダル上の文面も英語で表示されます。
Apple Storeの審査では、プライマリー言語に沿ってモーダルを出さないといけないので、英語のままで出していると審査に落ちる可能性があります。
そのために、モーダル上の文面を以下の手順で管理し変更していきましょう。
【結論】モーダル上の文面を操作する方法
では、モーダル上の文面を変更する方法について一緒に見ていきましょう。
先ほどまでに紹介している4つのパターンについて紹介していきます。
全てapp.jsonを編集する方法になります。
位置情報の許可リクエスト文章
位置情報アクセスの許可リクエスト文章を編集するには、app.jsonに以下の文言を加えます。
{
"expo": {
"ios": {
"infoPlist": {
"NSLocationWhenInUseUsageDescription": "このアプリは、あなたの現在位置を提供するサービスを提供するために位置情報のアクセスを必要とします。"
}
},
// 他の設定...
}
}
カメラ、写真ライブラリへのアクセス
{
"expo": {
"ios": {
"infoPlist": {
"NSCameraUsageDescription": "このアプリは、写真を撮影する機能を利用するためにカメラへのアクセスを必要とします。",
"NSPhotoLibraryUsageDescription": "このアプリは、写真を選択および保存する機能を利用するために写真ライブラリへのアクセスを必要とします。"
}
},
// 他の設定...
}
}
通知の許可へのアクセス
{
"expo": {
"ios": {
"infoPlist": {
"NSUserNotificationUsageDescription": "このアプリは、新しい情報および更新をお知らせするために通知の送信を許可する必要があります。"
}
},
// 他の設定...
}
}
中に記載してある文面は、自由に編集してください!
編集ができたら、再度ビルドしてみて動作を確認してみてください!
まとめ
今回は、expoでユーザーに許可を求めるモーダルの文面を管理する方法について解説しました。
アラート文言を編集することで、より適切なユーザー体験を提供することができます。
ぜひ、活用してくださいね。では、また!