テスト用のものです。
実際の運用ではデバイストークンなど一手間が必要です。

Androidを選択します。

Empty Activityを選択します。

Nameを決めると、Package nameが決まるのでメモに控えます。
証明書のフィンがプリントの取得
TESTPushApp $ keytool -v -list -alias androiddebugkey -keystore ~/.android/debug.keystore
キーストアのパスワードを入力してください:{空Enterキーを入力}
パスワードを得られます。
もくじ
設定ファイルのダウンロード
appの中にgoogle-services.jsonを配置する
/Users/kanehiroyuu/AndroidStudioProjects/TESTPushApp/app/google-services.json
プロジェクト/app/google-services.json
build.gradle
プロジェクトレベルのbuild.gradle(project: TEST-Push-App)
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google() ←●確認
jcenter()
}
dependencies {
+ classpath 'com.google.gms:google-services:4.3.2' ←●追加
classpath 'com.android.tools.build:gradle:3.5.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google() ←●確認
jcenter()
}
}
アプリレベルのbuild.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+ apply plugin: 'com.google.gms.google-services' ←●追加
・・・
dependencies {
+ implementation 'com.google.firebase:firebase-analytics:17.2.0' ←●追加
implementation fileTree(dir: 'libs', include: ['*.jar'])
・・・
}
+ apply plugin: 'com.google.gms.google-services' ←●追加
Sync Nowをクリック。
Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 16 declared in library [com.google.firebase:firebase-iid:19.0.0] /Users/kanehiroyuu/.gradle/caches/transforms-2/files-2.1/f826791e2ecfd93be6a46820de8617dc/firebase-iid-19.0.0/AndroidManifest.xml as the library might be using APIs not available in 15 Suggestion: use a compatible library with a minSdk of at most 15, or increase this project's minSdk version to at least 16, or use tools:overrideLibrary="com.google.firebase.iid" to force usage (may lead to runtime failures)
エラーが発生したので修正する。
build.gradle(Module: app)
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.test_push"
- minSdkVersion 15
+ minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
エラーが出たので修正
dependencies {
implementation 'com.google.firebase:firebase-analytics:17.2.0'
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.firebase:firebase-messaging:19.0.0' ←●バージョンを19.0.0に変更
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
Android Studio > Tools > Firebase >

Cloud Messaging > Set up Firebase Cloud Messagingをクリックします。

どんどんAddしてConnectedさせていってください。
MainActivity.kt
package com.example.test_push
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.google.firebase.messaging.FirebaseMessaging
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
+ FirebaseMessaging.getInstance().subscribeToTopic("test")
}
}
topicとして『test』を指定しています。
一旦起動する
Push Push!
Firebaseのコンソール

ウィザードにそって入力してPush!

Push! Push!
PHPからpushします。
<?php
$api_key = "{プロジェクトのAPIキー}";
$base_url = "https://fcm.googleapis.com/fcm/send";
// toに指定しているのはトピック名:testに対して一括送信するという意味
// 個別に送信したい場合はここに端末に割り振られたトークンIDを指定する
$data = array(
"to" => "/topics/test"
,"priority" => "high"
,"notification" => array(
"title" => "テスト送信3"
,"body" => "テスト送信本文3"
)
);
$header = array(
"Content-Type:application/json"
,"Authorization:key=".$api_key
);
$context = stream_context_create(array(
"http" => array(
'method' => 'POST'
,'header' => implode("\r\n",$header)
,'content'=> json_encode($data)
)
));
file_get_contents($base_url,false,$context);
APIキーがあればtopicを指定してpushできることがわかる
$ php pushtest.php
@see




