Lan*_*ler 8 android firebase firebase-cloud-messaging android-8.0-oreo
我一直试图在我的应用程序中实现Firebase消息传递一段时间.我遵循了不同类型的教程,包括Firebase的官方教程,使用Firebase Assistant手动和自动添加.
出于某种原因,以下陈述是正确的:
MyFirebaseInstanceIDService:
class MyFirebaseInstanceIDService : FirebaseInstanceIdService() {
val TAG = javaClass?.simpleName
override fun onTokenRefresh() {
super.onTokenRefresh()
val refreshedToken = FirebaseInstanceId.getInstance().token
System.out.println("firebasedebug (" + TAG + "): onTokenRefresh(): " + refreshedToken)
}
}
Run Code Online (Sandbox Code Playgroud)
MyFirebaseMessagingService
class : FirebaseMessagingService() {
val TAG = javaClass?.simpleName
override fun onMessageReceived(remoteMessage: RemoteMessage?) {
super.onMessageReceived(remoteMessage)
System.out.println("firebasedebug (" + TAG + "): onMessageReceived(remoteMessage: " + remoteMessage+")")
}
}
Run Code Online (Sandbox Code Playgroud)
我已将以下内容添加到我的清单中:
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="@string/default_notification_channel_id"/>
<service
android:name="dk.myapp.service.firebase.MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service
android:name="dk.myapp.service.firebase.MyFirebaseInstanceIDService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
(请注意,我已尝试将导出设置为true和false以及使用和不使用metatag设置通道)
我还在我的Application类中添加了以下内容:
FirebaseApp.initializeApp(this);
Run Code Online (Sandbox Code Playgroud)
显然,当我尝试通过Firebase使用方法"getToken()"时,这是必需的.A也尝试过使用和不使用这些方法.
在我的主要活动中,我尝试通过Firebase放置"getToken()"方法来尝试触发令牌的初始化,但仍然没有任何运气.
FirebaseInstanceId.getInstance().token
Run Code Online (Sandbox Code Playgroud)
我当然将消息库(和谷歌播放服务模块)添加到我的应用程序模块gradle:
compile 'com.google.firebase:firebase-messaging:15.0.0'
compile 'com.google.android.gms:play-services-ads:15.0.0'
compile 'com.google.android.gms:play-services-maps:15.0.0'
compile 'com.google.android.gms:play-services-base:15.0.0'
compile 'com.google.android.gms:play-services-location:15.0.0'
Run Code Online (Sandbox Code Playgroud)
还将此行添加到gradle文件的底部:
apply plugin: 'com.google.gms.google-services'
Run Code Online (Sandbox Code Playgroud)
这些对我的项目来说:
buildscript {
ext.kotlin_version = '1.1.4-2'
ext.anko_version = '0.10.2'
repositories {
mavenCentral()
jcenter()
google()
}
dependencies {
...
classpath 'com.google.gms:google-services:3.2.1' // google-services plugin
...
}
allprojects {
tasks.withType(JavaCompile) {
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
}
}
}
allprojects {
repositories {
maven {
url "https://maven.google.com" // Google's Maven repository
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我当然也将google-services.json添加到项目中
通过Firebase仪表板发送消息时,我尝试过: - 输入频道 - 将目标设置为用户段 - 将目标设置为单个设备(来自应用的令牌) - ...
我还尝试过以下方法: - 每当我尝试新方法时卸载并重新安装应用程序 - 删除instanceid并再次调用getToken - 尝试调试和非调试模式 - ...
以下是我的仪表板中的发送消息列表:
如果需要更多细节,请告诉我,我当然会提供(如果可能的话).
编辑 我尝试了REST API并做了一些观察.
我终于找到了针对我的特殊情况的解决方案。
我的解决方案是从应用程序标记中的清单文件中删除以下行:
android:label="@string/app_name"
tools:node="replace"
tools:replace="android:icon,android:label"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1216 次 |
| 最近记录: |