无法在Android Studio 2.3.3中解析“com.google.firebase:firebase-messaging:11.0.4”

时间:2017-08-10 14:59:49

标签: android firebase gradle firebase-cloud-messaging android-studio-2.3

我想在Android studio上设置firebase Cloud Messaging Client App, 我正在使用最新版本的Android studio(2.3.3),我的android SDK已全面更新。

这是我的项目gradle文件:

 buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.google.gms:google-services:3.1.0'
        classpath 'com.android.tools.build:gradle:2.3.3'
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

这是我的app build gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "ir.digiwindow.driver.gps_status"
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha7'
    testCompile 'junit:junit:4.12'
    compile 'com.google.firebase:firebase-messaging:11.0.4'


}
apply plugin: 'com.google.gms.google-services'

我总是给出这个错误:

Error:(30, 13) Failed to resolve: compile 'com.google.firebase:firebase-messaging:11.0.4'

这里有趣的是,当我将版本从11.0.4更改为10.0.1时,没有发生错误并且gradle构建成功! 我在stackoverflow和google开发者网站上阅读了所有相关帖子,但这个错误仍然存​​在! 任何想法都欢迎......

编辑1: 当我去寻找更新时,我没有在图片中看到有关更新Google Play服务的任何选项: enter image description here

12 个答案:

答案 0 :(得分:18)

我遇到了同样的问题,我通过更新两件事来解决它

  1. Google Play服务
  2. Google存储库
  3. enter image description here

答案 1 :(得分:3)

Jan先生,请按照以下链接明确说明 - >

https://firebase.google.com/docs/android/setup#Prerequisites

<强>先决条件 -

  • 运行Android 4.0(Ice Cream Sandwich)或更新版本以及Google Play服务11.6.0或更高版本的设备
  • 来自Google Repository的Google Play服务SDK,可在Android SDK Manager中找到
  • 最新版本的Android Studio 1.5或更高版本

在SDK Manager中升级您的 Google Play服务和Google存储库

打开Android工作室&gt;转到文件&gt;设置&gt; <外观和行为>系统设置&gt; Android SDK&gt; SDK工具&gt;更新

1- Google Play服务

支持存储库

下的

2- Google存储库

答案 2 :(得分:1)

正如Dileep在文档中提到的那样,您需要安装Google Play Services 11.0.4或更高版本。

只需打开SDK Manager,
然后Android SDK(在左侧菜单上)
然后转到SDK工具标签并更新Google Play服务,该服务目前位于第43版(2017-08-10)。

这解决了我。

答案 3 :(得分:1)

尝试通过firebase Assitance添加Firebase功能转到工具然后选择Firebase,然后选择要添加的功能,如实时数据库。 它会自动将编译依赖项添加到项目中。我做了同样的事情并解决了我的问题。

答案 4 :(得分:1)

应该是这样的:

dependencies {
    classpath 'com.android.tools.build:gradle:3.1.1'

    classpath 'com.google.gms:google-services:3.1.1' // ADD this
}

app:(11.8.0)

implementation 'com.google.firebase:firebase-messaging:11.8.0' // ADD this

答案 5 :(得分:1)

Un Tick Offline Gradle Build将解决此问题,如果上述任何解决方案无法正常工作

答案 6 :(得分:1)

截至 2020 年 1 月 10 日,这对我有用。

顶级 build.gradle 文件:

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.1.1"
        classpath 'com.google.gms:google-services:4.3.4'
    }
}    
allprojects {
    repositories {
        google()
        jcenter()
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

应用级 build.gradle 文件:

plugins {
    id 'com.android.application'
    id 'com.google.gms.google-services'
}
//Top code is same as= apply plugin: 'com.android.application'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.0"

    defaultConfig {
        applicationId "com.gc.pushnotificationssampleapp2"
        minSdkVersion 24
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

    //Start of unique libs for this project:
    implementation 'com.google.firebase:firebase-messaging:20.0.1'
}

确保您的应用已在 Firebase 中注册。因此,您的项目中应该有一个 google-services.json 文件,其中包含项目的包名称,如下所示:

"client_info": {
  "mobilesdk_app_id": "1:551460864994:android:c0310a960a3afb06df2fbb",
  "android_client_info": {
    "package_name": "com.gc.pushnotificationssampleapp2"
  }

AndroidManifest.xml 需要:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
. . . 
<service
    android:name=".FirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

答案 7 :(得分:0)

我遇到了同样的问题,我刚刚将版本从11.0.4更改为10.0.1,错误就消失了。试试吧,它可能会有所帮助。

答案 8 :(得分:0)

我遇到了同样的问题。后来发现我完全从firebase文档复制了这行。

  

Classpath&#39; com.google.gms:google-services:3.1.1&#39;

注意CAPITAL&#39; C&#39;。

应该是

classpath 'com.google.gms:google-services:3.1.1'

小写&#39; c&#39;。

愚蠢的错误,但很容易引起注意。

答案 9 :(得分:0)

Gradle版本,firebase服务版本和google-play-services版本在使用时应该相同。例如,您不能将gradle 2.x与firebase core 16.x一起使用。

答案 10 :(得分:0)

解决方案是将com.google.gms:google-services的类路径更新为最新版本

这是Android Studio在项目的build.gradle文件中提示的

enter image description here

enter image description here

答案 11 :(得分:0)

在gradle中添加

 Dependencies{
    
     // for the Firebase
        implementation platform('com.google.firebase:firebase-bom:26.5.0')
        implementation 'com.google.firebase:firebase-core:16.0.1'
        implementation 'com.google.firebase:firebase-messaging:20.1.3'
         implementation 'com.google.firebase:firebase-analytics:17.2.3'
    
    
    
    }
    
    apply plugin: 'com.google.gms.google-services'

并在清单中添加

 <application>

     <service android:name=".util.FirebaseMessageReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>


    </application>

和 FirebaseMessageReceiver.java

这是自定义布局

    package com.---------.app.util;

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.widget.RemoteViews;

import androidx.core.app.NotificationCompat;

import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import com.pisel.app.MainActivity;
import com.pisel.app.R;

public class FirebaseMessageReceiver
        extends FirebaseMessagingService {

    // Override onMessageReceived() method to extract the
    // title and
    // body from the message passed in FCM
    @Override
    public void
    onMessageReceived(RemoteMessage remoteMessage) {
        // First case when notifications are received via
        // data event
        // Here, 'title' and 'message' are the assumed names
        // of JSON
        // attributes. Since here we do not have any data
        // payload, This section is commented out. It is
        // here only for reference purposes.
        /*if(remoteMessage.getData().size()>0){
            showNotification(remoteMessage.getData().get("title"),
                          remoteMessage.getData().get("message"));
        }*/

        // Second case when notification payload is
        // received.
        if (remoteMessage.getNotification() != null) {
            // Since the notification is received directly from
            // FCM, the title and the body can be fetched
            // directly as below.
            showNotification(
                    remoteMessage.getNotification().getTitle(),
                    remoteMessage.getNotification().getBody());
        }
    }

    // Method to get the custom Design for the display of
    // notification.
    private RemoteViews getCustomDesign(String title,
                                        String message) {
        RemoteViews remoteViews = new RemoteViews(
                getApplicationContext().getPackageName(),
                R.layout.notification);
        remoteViews.setTextViewText(R.id.title, title);
        remoteViews.setTextViewText(R.id.message, message);
        remoteViews.setImageViewResource(R.id.icon,
                R.drawable.flag_belarus);
        return remoteViews;
    }

    // Method to display the notifications
    public void showNotification(String title,
                                 String message) {
        // Pass the intent to switch to the MainActivity
        Intent intent
                = new Intent(this, MainActivity.class);
        // Assign channel ID
        String channel_id = "notification_channel";
        // Here FLAG_ACTIVITY_CLEAR_TOP flag is set to clear
        // the activities present in the activity stack,
        // on the top of the Activity that is to be launched
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        // Pass the intent to PendingIntent to start the
        // next Activity
        PendingIntent pendingIntent
                = PendingIntent.getActivity(
                this, 0, intent,
                PendingIntent.FLAG_ONE_SHOT);

        // Create a Builder object using NotificationCompat
        // class. This will allow control over all the flags
        NotificationCompat.Builder builder
                = new NotificationCompat
                .Builder(getApplicationContext(),
                channel_id)
                .setSmallIcon(R.drawable.flag_india)
                .setAutoCancel(true)
                .setVibrate(new long[]{1000, 1000, 1000,
                        1000, 1000})
                .setOnlyAlertOnce(true)
                .setContentIntent(pendingIntent);

        // A customized design for the notification can be
        // set only for Android versions 4.1 and above. Thus
        // condition for the same is checked here.
        if (Build.VERSION.SDK_INT
                >= Build.VERSION_CODES.JELLY_BEAN) {
            builder = builder.setContent(
                    getCustomDesign(title, message));
        } // If Android Version is lower than Jelly Beans,
        // customized layout cannot be used and thus the
        // layout is set as follows
        else {
            builder = builder.setContentTitle(title)
                    .setContentText(message)
                    .setSmallIcon(R.drawable.flag_british_indian_ocean_territory);
        }
        // Create an object of NotificationManager class to
        // notify the
        // user of events that happen in the background.
        NotificationManager notificationManager
                = (NotificationManager) getSystemService(
                Context.NOTIFICATION_SERVICE);
        // Check if the Android Version is greater than Oreo
        if (Build.VERSION.SDK_INT
                >= Build.VERSION_CODES.O) {
            NotificationChannel notificationChannel
                    = new NotificationChannel(
                    channel_id, "web_app",
                    NotificationManager.IMPORTANCE_HIGH);
            notificationManager.createNotificationChannel(
                    notificationChannel);
        }

        notificationManager.notify(0, builder.build());
    }
}

为通知设计创建布局

  <!-- Parent Layout of ImageView -->
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <!--Image to be displayed beside the notification text-->
        <ImageView
            android:id="@+id/icon"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:padding="5dp"
            android:src="@drawable/flag_benin" />
    </LinearLayout>

    <!-- Parent layout for holding the Title and the Body-->
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical"
        android:padding="5dp">

        <!-- TextView for Title -->
        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Title"
            android:textColor="#000"
            android:textStyle="bold" />

        <!-- TextView for Body -->
        <TextView
            android:id="@+id/message"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Message"
            android:textSize="15sp" />

    </LinearLayout>

</LinearLayout>