הגנה על פרטי הכניסה לאפליקציית Firebase ML ל-Android ב-Cloud
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
אם אפליקציית Android שלכם משתמשת באחד מממשקי הענן של Firebase ML, לפני השקת האפליקציה בסביבת הייצור, כדאי לבצע כמה פעולות נוספות כדי למנוע גישה לא מורשית ל-API.
באפליקציות הייצור, תדאגו שרק לקוחות מאומתים יוכלו לגשת לשירותי הענן. (שימו לב: רק מכשירים ללא הרשאות בסיס יכולים לבצע אימות באמצעות השיטה שמתוארת כאן).
לאחר מכן, תיצרו מפתח API לניפוי באגים בלבד, שתוכלו להשתמש בו בקלות במהלך הבדיקה והפיתוח.
1. רישום אפליקציות לייצור ב-Firebase
קודם כול, צריך לרשום את אפליקציות הייצור ב-Firebase.
מוודאים שיש לכם את חתימות ה-SHA-1 של האפליקציה. כאן מוסבר איך מאמתים את הלקוח.
עוברים אל settingsProject settings (הגדרות הפרויקט) במסוף Firebase ובוחרים בכרטיסייה Settings (הגדרות).
גוללים למטה לכרטיס האפליקציות שלך ובוחרים את אפליקציית Android.
מוסיפים את חתימת ה-SHA-1 של האפליקציה לפרטי האפליקציה.
2. הגבלת ההיקף של מפתחות ה-API
בשלב הבא, מגדירים את מפתחות ה-API הקיימים כך שלא תהיה להם גישה ל-Cloud Vision API:
פותחים את הדף Credentials במסוף Google Cloud. כשמופיעה בקשה, בוחרים את הפרויקט.
פותחים את תצוגת העריכה של כל מפתח API קיים ברשימה.
בקטע API restrictions, בוחרים באפשרות Restrict key, ואז מוסיפים לרשימה את כל ממשקי ה-API שרוצים שלמפתח ה-API תהיה גישה אליהם. חשוב לא לכלול את Cloud Vision API.
כשמגדירים הגבלות על ממשקי API של מפתח API, מציינים במפורש לאילו ממשקי API יש למפתח גישה. כברירת מחדל, אם בקטע API restrictions נבחרה האפשרות Don't restrict key, אפשר להשתמש במפתח API כדי לגשת לכל API שמופעל בפרויקט.
מעכשיו, מפתחות ה-API הקיימים לא יאפשרו גישה לשירותי ML בענן, אבל כל מפתח ימשיך לפעול עבור כל ממשקי ה-API שהוספתם לרשימת הגבלות ה-API שלו.
חשוב לזכור שאם תפעילו בעתיד ממשקי API נוספים, תצטרכו להוסיף אותם לרשימה הגבלות על API של מפתח ה-API הרלוונטי.
3. יצירה ושימוש במפתח API לניפוי באגים בלבד
לבסוף, יוצרים מפתח API חדש לשימוש בפיתוח בלבד. Firebase ML יכול להשתמש במפתח ה-API הזה כדי לגשת לשירותי Google Cloud בסביבות שבהן אימות האפליקציה לא אפשרי, למשל כשהיא פועלת באמולטורים.
יוצרים מפתח API חדש לשימוש בפיתוח:
פותחים את הדף Credentials במסוף Google Cloud. כשמופיעה בקשה, בוחרים את הפרויקט.
לוחצים על Create credentials > API key ורושמים את מפתח ה-API החדש. המפתח הזה מאפשר גישת API מאפליקציות לא מאומתות, ולכן חשוב לשמור על סודיות המפתח.
כדי לוודא שמפתח ה-API החדש לניפוי באגים לא ידלוף עם האפליקציה שפורסמה, צריך לציין את מפתח ה-API לניפוי באגים בקובץ מניפסט של Android שמשמש רק לבניית גרסאות לניפוי באגים:
אם עדיין אין לכם קובץ מניפסט לניפוי באגים, יוצרים אותו על ידי לחיצה על File > New > Other > Android Manifest File (קובץ > חדש > אחר > קובץ מניפסט של Android) ובחירה באפשרות debug מתוך קבוצות מקורות היעד.
באפליקציה, מגדירים את Firebase ML כך שישתמש בהתאמה של טביעת האצבע של האישור כדי לאמת את הלקוח בסביבת הייצור, ושישתמש במפתחות API – מפתח הניפוי באגים – רק בגרסאות ניפוי באגים:
Kotlin
valoptionsBuilder=FirebaseVisionCloudImageLabelerOptions.Builder()if(!BuildConfig.DEBUG){// Requires physical, non-rooted device:optionsBuilder.enforceCertFingerprintMatch()}// Set other options. For example:optionsBuilder.setConfidenceThreshold(0.8f)// ...// And lastly:valoptions=optionsBuilder.build()FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)
FirebaseVisionCloudImageLabelerOptions.BuilderoptionsBuilder=newFirebaseVisionCloudImageLabelerOptions.Builder();if(!BuildConfig.DEBUG){// Requires physical, non-rooted device:optionsBuilder.enforceCertFingerprintMatch();}// Set other options. For example:optionsBuilder.setConfidenceThreshold(0.8f);// ...// And lastly:FirebaseVisionCloudImageLabelerOptionsoptions=optionsBuilder.build();FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-08-31 (שעון UTC)."],[],[],null,["\u003cbr /\u003e\n\nIf your Android app uses one of Firebase ML's cloud APIs, before you launch your\napp in production, you should take some additional steps to prevent\nunauthorized API access.\n\nFor your production apps, you will ensure that only authenticated clients can\naccess cloud services. (Note that only non-rooted devices can authenticate using\nthe method described.)\n\nThen, you will create a debug-only API key that you can use for convenience\nduring testing and development.\n\n1. Register your production apps with Firebase\n\nFirst, register your production apps with Firebase.\n\n1. Make sure that you have your app's SHA-1 signatures. Refer to\n [Authenticating your client](//developers.google.com/android/guides/client-auth)\n to learn how.\n\n2. Go to your settings\n *Project settings* in the Firebase console, then select the *Settings*\n tab.\n\n3. Scroll down to the *Your apps* card, then select your Android app.\n\n4. Add your app's SHA-1 signature to your app's information.\n\n2. Restrict the scope of your API keys\n\nNext, configure your existing API keys to disallow access to the Cloud Vision\nAPI:\n\n1. Open the [Credentials](https://console.cloud.google.com/apis/credentials?project=_) page of the\n Google Cloud console. When prompted, select your project.\n\n2. For each existing API key in the list, open the editing view.\n\n3. In the *API restrictions* section, select **Restrict key** , then add to the\n list all of the APIs to which you want the API key to have access. Make sure\n to ***not*** include the Cloud Vision API.\n\n When you configure an API key's *API restrictions* , you are explicitly\n declaring the APIs to which the key has access. **By default, when the *API\n restrictions* section has *Don't restrict key* selected, an API key can be\n used to access any API that is enabled for the project.**\n\nNow, your existing API keys will not grant access to cloud ML services, but each\nkey will continue to work for any APIs that you added to its *API restrictions*\nlist.\n\nNote that if you enable any additional APIs in the future, you must add them to\nthe *API restrictions* list for the applicable API key.\n\n3. Create and use a debug-only API key\n\nFinally, create a new API key to be used only for development. Firebase ML can\nuse this API key to access Google Cloud services in environments where app\nauthentication isn't possible, such as when running on emulators.\n\n1. Create a new API key to be used for development:\n\n 1. Open the [Credentials](https://console.cloud.google.com/apis/credentials?project=_) page of the\n Google Cloud console. When prompted, select your project.\n\n 2. Click **Create credentials \\\u003e API key** and take note of the new API\n key. This key allows API access from unauthenticated apps, so\n **keep this key confidential**.\n\n2. To ensure the new debug API key is not leaked with your released app,\n specify the debug API key in an Android manifest file used only for debug\n builds:\n\n 1. If you don't already have a debug manifest, create one by clicking\n **File \\\u003e New \\\u003e Other \\\u003e Android Manifest File** and selecting `debug`\n from the target source sets.\n\n 2. In the debug manifest, add the following declaration:\n\n ```text\n \u003capplication\u003e\n \u003cmeta-data\n android:name=\"com.firebase.ml.cloud.ApiKeyForDebug\"\n android:value=\"your-debug-api-key\" /\u003e\n \u003c/application\u003e\n ```\n3. In your app, configure Firebase ML to use certificate fingerprint matching to\n authenticate your client in production and to use API keys---the debug\n key---only in debug builds:\n\n Kotlin \n\n ```kotlin\n val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder()\n if (!BuildConfig.DEBUG) {\n // Requires physical, non-rooted device:\n optionsBuilder.enforceCertFingerprintMatch()\n }\n\n // Set other options. For example:\n optionsBuilder.setConfidenceThreshold(0.8f)\n // ...\n\n // And lastly:\n val options = optionsBuilder.build()\n FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)https://github.com/firebase/snippets-android/blob/cc307b137a106d66a52fa6e9bee6f4f55dab9f76/mlkit/app/src/main/java/com/google/firebase/example/mlkit/kotlin/MainActivity.kt#L30-L42\n ```\n\n Java \n\n ```java\n FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder =\n new FirebaseVisionCloudImageLabelerOptions.Builder();\n if (!BuildConfig.DEBUG) {\n // Requires physical, non-rooted device:\n optionsBuilder.enforceCertFingerprintMatch();\n }\n\n // Set other options. For example:\n optionsBuilder.setConfidenceThreshold(0.8f);\n // ...\n\n // And lastly:\n FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build();\n FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);https://github.com/firebase/snippets-android/blob/cc307b137a106d66a52fa6e9bee6f4f55dab9f76/mlkit/app/src/main/java/com/google/firebase/example/mlkit/MainActivity.java#L30-L43\n ```\n\nNext steps\n\nSee the [launch checklist](/support/guides/launch-checklist) for information on\npreparing your app to launch when using other Firebase features."]]