質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

2回答

961閲覧

【Xamarin.Forms】接続文字列などの機密ファイルをアプリ内のどこに保存する?

naritamago

総合スコア15

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

4クリップ

投稿2018/12/03 05:35

前提・実現したいこと

タイトル通り、Xamarin.Formsアプリで、クラウド(に限った話ではないですが)との接続に使う接続文字列をどこに保存するべきか教えていただきたいです。

現状は動作確認のみなのでハードコーディングなのですが、流石にこのままというわけにはいかず、ちゃんとした場所に保管してそこから読み取る方式に変更したいです。

そこで、AndroidとiOSの規約を読んだのですが、

  • Android:/data/data/(パッケージ名)/files/(ファイル名)
  • iOS:App/Library/(サブフォルダ名)/(ファイル名)

にそれぞれ保存するとありました。

ただ、アプリはXamarin.Formsで作成しており、クラウドとの接続メソッドもPCL内のメソッドです。

この場合、接続文字列を記載したファイルはPCL内のどこかに格納しておくのか、それともそれぞれのOSのプロジェクトに格納するのか、どちらがよいでしょうか?
また、他に推奨のやり方があるならご教示いただきたいです。

補足情報

以下のMicrodoftドキュメントも一読してみました。
接続文字列と構成ファイル
外部ファイルに定義して名前呼び出しする方法が既にあれば楽できると思ったのですが、app.configのようなファイルを見つけられず、新規作成する必要があるのか、そもそもそういった仕組みは無いのかわからずじまいでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

シンプルにKey-Valueでよければ、Xamarin.EssentialsのSecure Storageを使用してはいかがでしょうか。
Xamarin.Essentials: セキュリティで保護されたストレージ

投稿2018/12/04 00:59

ukgraphics

総合スコア69

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naritamago

2018/12/04 04:23

ukgraphicsさん 回答ありがとう御座います。 Xamarin.Essentialsは使用したことなく、すぐに試せないのでお聞きしたいのですが。。。 こちらは、OAuthトークンを定義しておいて、SetAsyncでアプリ内(OS内?)のセキュアなストレージに接続文字列を格納、GetAsyncでOAuthトークンに対応した接続文字列を取得する、という使い方でよいのでしょうか?
ukgraphics

2018/12/06 01:46

はい、Xamarin.EssentialsのSecureStorageの使い方はそうなると思います。
guest

0

ベストアンサー

クラウド(に限った話ではないですが)との接続に使う接続文字列をどこに保存するべきか

という観点では、 Xamarin.Essentials の SecureStorage はオーバースペックというか、用途が違うように思います。

SecureStorage はアプリのユーザーに関わる秘匿情報をクライアントに保持せざるを得ない場合に使用を検討するものです。

Android も iOS もアプリはサンドボックス環境に配置され、(ジェイルブレイクされていなければ)他のアプリから容易にアクセスできなくなっています。

なので、クラウドへの接続文字列やAPIキーは、ハードコーディングでそれほど問題ではないと思います。

「ソースコードリポジトリに接続文字列やAPIキーを格納すべきではない」という観点では、

のように、ソースコードリポジトリに格納するファイルの接続文字列にはダミーを入れておき、CI などのビルド時に実際の値に置き換える、という手法がよく取られています。

投稿2018/12/14 02:36

amay077

総合スコア1075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naritamago

2018/12/17 03:06

amay077さん、回答ありがとう御座います。なんとなくそんな気はしていましたが、ハードコーディングでもそれほど問題ないのですね(自信を持ってハードコーディングで行きます!と宣言するかはともかく)。ukgraphicsさんに示していただいたSecureStorageも検討していたのですが、そのためだけにXamarin.Essentialを導入するのもなんか勿体無いような気がしていたので用途も示していただいたamay077さんをベストアンサーにさせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問