Tìm kiếm trang web

javascript - Expo Google-Sign-In LỖI_NHÀ_PHÁT_TRIỂN


Tôi đã phát triển một ứng dụng React Native, và tôi đang sử dụng Expo Google-Sign-In cho xác thực Firebase của mình. Tôi nhận được lỗi "DEVELOPER_ERROR" khi cố gắng xác thực trên APK độc lập của tôi trên Android.

Ban đầu, tôi đã sử dụng "Expo Google", tuy nhiên hiện phương thức đó đã bị ngừng hỗ trợ và nút đăng nhập của tôi không thực hiện được gì trên APK độc lập của tôi. Với phương thức Expo Google, tôi nhận thấy rằng tôi phải thiết lập androidStandaloneAppClientId. Ngay cả sau khi làm điều đó, việc đăng nhập vẫn bị kẹt ở trang chủ Google sau khi xác thực. Tôi đã thử giải pháp sử dụng URI chuyển hướng tùy chỉnh, như trong

redirectUrl: $ {AppAuth.OAuthRedirect}:/oauth2redirect/google

nhưng điều đó đã dẫn đến một lỗi khác: không khớp redirect_uri.

Tôi đã chuyển sang sử dụng thư viện Expo Google-Sign-In thay vào đó, và điều đó đang gây ra lỗi DEVELOPER_ERROR mỗi khi tôi cố gắng xác thực.

Sau đó, tôi đã thử:

  • tải xuống google-services.json và sử dụng nó trong ứng dụng của tôi
  • cài đặt dấu vân tay SHA1 trong google-services.json và trong Firebase
  • đặt certificateHash bên trong android.configuration.certificate hash trong app.json của tôi thành dấu vân tay SHA1 của tôi.
  • kiểm tra và đảm bảo tên gói được đặt đúng cách

Tôi đã thử mọi thứ khác mà tôi có thể đã không đề cập đến từ các chủ đề hiện có liên quan đến LỖI_NHÀ_PHÁT_TRIỂN trong Expo Google-Sign-In.

Các biến mà tôi đề cập trong mã của mình bên dưới là từ những nguồn sau:

SHA1 đã được tạo ra và sử dụng để tạo thông tin đăng nhập của tôi, và là dấu vân tay được sử dụng trong ID Khách hàng OAuth Android của tôi.

ID khách hàng mà tôi tham chiếu trong các tệp của mình là ID khách hàng Web OAuth của tôi. Tuy nhiên, tôi cũng đã thử sử dụng ID Android và điều đó không thay đổi gì cả.

"CurrentKey" trong api_key là khóa API từ dự án Firebase của tôi.

Đây là một liên kết đến trang Thông tin xác thực Google của tôi.

https://i.sstatic.net/MVfO2.jpg

/* My app.json: */

{
  "expo": {
    "name": "AssistiveNote",
    "privacy": "public",
    "description": "A note app for people who have trouble reading text.",
    "slug": "assistivenote",

    "sdkVersion": "33.0.0",
    "version": "2.0.0",
    "orientation": "portrait",
    "icon": "./screens/images/icon.png",


    "ios": {
      "bundleIdentifier": "com.danyalbabar.assistivenote"
    },

    "android": {
      "versionCode": 2,
      "package": "com.danyalbabar.assistivenote",
      "googleServicesFile": "./google-services.json",
      "permissions": [ " " ],
      "config": {
        "googleSignIn": {
            "certificateHash": "XXXX"
        }
      }
    }

  }
}

Tệp google-services.json của tôi:

  {
  "project_info": {
    "project_number": "XXXX",
    "firebase_url": "https://era-gvision.firebaseio.com",
    "project_id": "era-gvision",
    "storage_bucket": "era-gvision.appspot.com"
  },
  "client": [
    {
      "client_info": {
        "mobilesdk_app_id": "XXXX",
        "android_client_info": {
          "package_name": "com.danyalbabar.assistivenote"
        }
      },
      "oauth_client": [
        {
          "client_id": "XXXX",
          "client_type": 3
        }
      ],
      "api_key": [
        {
          "current_key": "XXXX"
        }
      ],
      "services": {
        "appinvite_service": {
          "other_platform_oauth_client": [
            {
              "client_id": "XXXX",
              "client_type": 3
            }
          ]
        }
      }
    }
  ],
  "configuration_version": "1"
}

Câu trả lời #1

Cập nhật eas tháng 11 năm 2022 (Android)

Nếu bạn đang sử dụng eas và nhận được DEVELOPER_ERROR:

  • chạy eas credentials (làm theo các bước để lấy SHA1 của bạn)
  • Thêm SHA1 vào ứng dụng Android của bạn trong bảng điều khiển Firebase (https://console.firebase.google.com/project/YOUR_FIREBASE_APP_ID/settings/general/)
  • tải xuống google-services.json (cùng URL như trên) và đặt nó vào thư mục dự án của bạn
  • cập nhật app.json của bạn để bao gồm expo.android.googleServicesFile: "./path/to/google-services.json"
  • Cũng bên trong app.json: kiểm tra kỹ rằng expo.android.package khớp với gói từ googleServicesFile
  • Hãy chắc chắn khởi tạo đăng nhập Google mà không có bất kỳ đối số nào cho Android GoogleSignin.configure()

Nếu nó vẫn không hoạt động

  • Tải xuống tệp apk của bạn
  • chạy keytool -printcert -jarfile app.apk (sẽ in ra SHA1)
  • Kiểm tra kỹ rằng SHA1 được in ở trên khớp với SHA1 trong bảng điều khiển Firebase của bạn (hoặc, bạn có thể xem/quản lý các khóa API OAuth của mình tại https://console.cloud.google.com/apis/credentials?project=YOUR_PROJECT_ID)

Câu trả lời #2

Đây là sự không khớp cấu hình. Hãy chắc chắn rằng tệp android/app/google-services.json của bạn là chính xác.

Bạn có thể cần thêm dấu vân tay chứng chỉ SHA của mình vào cấu hình Firebase. Tìm dấu vân tay SHA1 của bạn bằng cách làm theo hướng dẫn trong bài đăng này: Dấu vân tay SHA-1 của chứng chỉ keystore. Sau đó, đi tới https://console.firebase.google.com/, chọn ứng dụng của bạn, và thêm giá trị SHA1 dưới Cài đặt Dự án (biểu tượng bánh răng ở góc trên bên trái) -> Ứng dụng của bạn -> Dấu vân tay chứng chỉ SHA

Nếu bạn đang truyền webClientId trong đối tượng cấu hình tới GoogleSignin.configure(), hãy đảm bảo rằng nó đúng. Bạn có thể lấy webClientId của mình từ Google Developer Console. Chúng được liệt kê dưới 'OAuth 2.0 client IDs'.

Nếu bạn đang chạy ứng dụng của mình ở chế độ gỡ lỗi và không sử dụng webClientId hoặc bạn chắc chắn rằng nó đúng, vấn đề có thể là do không khớp chữ ký (SHA-1 hoặc SHA-256). Bạn cần thêm những điều sau vào android/app/build.gradle:

signingConfigs {
  debug {
       storeFile file(MYAPP_RELEASE_STORE_FILE)
       storePassword MYAPP_RELEASE_STORE_PASSWORD
       keyAlias MYAPP_RELEASE_KEY_ALIAS
       keyPassword MYAPP_RELEASE_KEY_PASSWORD
  }
  release {
       ...
  }