テスト用のものです。
実際の運用ではデバイストークンなど一手間が必要です。
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