华为推送集成
获取证书指纹
1.找到你的jdk 路径 :打开cmd 输入 java -version
2.找到你的jdk 路径一般 C:\Program Files\Java是在这个路径下的
3.进入cmd命令行 输入 keytool -list -v -keystore +你的项目的keystore路径 提示:
keytool -list -v -keystore C:\TestApp.jks
4.输入密码 拿到 SHA256指纹
5.登录华为开发者平台,在点击Push,选择我的项目,在应用下面输入你的 SHA256指纹 ,再点击右边的小勾
6.新建 MyPushService类,推送token 返回到 onNewToken方法里
7.添加依赖 主app dependencies下 implementation 'com.huawei.hms:push:4.0.3.301'
apply plugin: 'com.huawei.agconnect'
拷贝 agconnect-services.json 到我项目下
classpath 'com.huawei.agconnect:agcp:1.2.1.301'
在repositories和allprojects下添加 maven { url 'https://developer.huawei.com/repo/' }
8.在MainActivity中调用 getToken()方法
private void getToken() { new Thread() { @Override public void run() { try { String appId = AGConnectServicesConfig.fromContext(MainActivity.this).getString("client/app_id"); String token = HmsInstanceId.getInstance(MainActivity.this).getToken(appId, "HCM"); if(!TextUtils.isEmpty(token)) { sendRegTokenToServer(token); } } catch (ApiException e) { Log.e("wl", "get token failed, " + e); } } }.start(); } private void sendRegTokenToServer(String token) { Log.e("wl", "sending token to server. token:" + token); }
public class MyPushService extends HmsMessageService {
private static final String TAG = "PushDemoLog";
private final static String CODELABS_ACTION = "com.huawei.codelabpush.action";
/**
* When an app calls the getToken method to apply for a token from the server,
* if the server does not return the token during current method calling, the server can return the token through this method later.
* This method callback must be completed in 10 seconds. Otherwise, you need to start a new Job for callback processing.
* @param token token
*/
@Override
public void onNewToken(String token) {
Log.i(TAG, "received refresh token:" + token);
// send the token to your app server.
if (!TextUtils.isEmpty(token)) {
// This method callback must be completed in 10 seconds. Otherwise, you need to start a new Job for callback processing.
refreshedTokenToServer(token);
}
Intent intent = new Intent();
intent.setAction(CODELABS_ACTION);
intent.putExtra("method", "onNewToken");
intent.putExtra("msg", "onNewToken called, token: " + token);
sendBroadcast(intent);
}
private void refreshedTokenToServer(String token) {
Log.i(TAG, "sending token to server. token:" + token);
}
/**
* This method is used to receive downstream data messages.
* This method callback must be completed in 10 seconds. Otherwise, you need to start a new Job for callback processing.
*
* @param message RemoteMessage
*/
@Override
public void onMessageReceived(RemoteMessage message) {
Log.i(TAG, "onMessageReceived is called");
if (message == null) {
Log.e(TAG, "Received message entity is null!");
return;
}
// getCollapseKey() Obtains the classification identifier (collapse key) of a message.
// getData() Obtains valid content data of a message.
// getMessageId() Obtains the ID of a message.
// getMessageType() Obtains the type of a message.
// getNotification() Obtains the notification data instance from a message.
// getOriginalUrgency() Obtains the original priority of a message.
// getSentTime() Obtains the time when a message is sent from the server.
// getTo() Obtains the recipient of a message.
Log.i(TAG, "getCollapseKey: " + message.getCollapseKey()
+ "\n getData: " + message.getData()
+ "\n getFrom: " + message.getFrom()
+ "\n getTo: " + message.getTo()
+ "\n getMessageId: " + message.getMessageId()
+ "\n getOriginalUrgency: " + message.getOriginalUrgency()
+ "\n getUrgency: " + message.getUrgency()
+ "\n getSendTime: " + message.getSentTime()
+ "\n getMessageType: " + message.getMessageType()
+ "\n getTtl: " + message.getTtl());
// getBody() Obtains the displayed content of a message
// getTitle() Obtains the title of a message
// getTitleLocalizationKey() Obtains the key of the displayed title of a notification message
// getTitleLocalizationArgs() Obtains variable parameters of the displayed title of a message
// getBodyLocalizationKey() Obtains the key of the displayed content of a message
// getBodyLocalizationArgs() Obtains variable parameters of the displayed content of a message
// getIcon() Obtains icons from a message
// getSound() Obtains the sound from a message
// getTag() Obtains the tag from a message for message overwriting
// getColor() Obtains the colors of icons in a message
// getClickAction() Obtains actions triggered by message tapping
// getChannelId() Obtains IDs of channels that support the display of messages
// getImageUrl() Obtains the image URL from a message
// getLink() Obtains the URL to be accessed from a message
// getNotifyId() Obtains the unique ID of a message
RemoteMessage.Notification notification = message.getNotification();
if (notification != null) {
Log.i(TAG, "\n getImageUrl: " + notification.getImageUrl()
+ "\n getTitle: " + notification.getTitle()
+ "\n getTitleLocalizationKey: " + notification.getTitleLocalizationKey()
+ "\n getTitleLocalizationArgs: " + Arrays.toString(notification.getTitleLocalizationArgs())
+ "\n getBody: " + notification.getBody()
+ "\n getBodyLocalizationKey: " + notification.getBodyLocalizationKey()
+ "\n getBodyLocalizationArgs: " + Arrays.toString(notification.getBodyLocalizationArgs())
+ "\n getIcon: " + notification.getIcon()
+ "\n getSound: " + notification.getSound()
+ "\n getTag: " + notification.getTag()
+ "\n getColor: " + notification.getColor()
+ "\n getClickAction: " + notification.getClickAction()
+ "\n getChannelId: " + notification.getChannelId()
+ "\n getLink: " + notification.getLink()
+ "\n getNotifyId: " + notification.getNotifyId());
}
Intent intent = new Intent();
intent.setAction(CODELABS_ACTION);
intent.putExtra("method", "onMessageReceived");
intent.putExtra("msg", "onMessageReceived called, message id:" + message.getMessageId() + ", payload data:"
+ message.getData());
sendBroadcast(intent);
Boolean judgeWhetherIn10s = false;
// If the messages are not processed in 10 seconds, the app needs to use WorkManager for processing.
if (judgeWhetherIn10s) {
startWorkManagerJob(message);
} else {
// Process message within 10s
processWithin10s(message);
}
}
private void startWorkManagerJob(RemoteMessage message) {
Log.d(TAG, "Start new Job processing.");
}
private void processWithin10s(RemoteMessage message) {
Log.d(TAG, "Processing now.");
}
@Override
public void onMessageSent(String msgId) {
Log.i(TAG, "onMessageSent called, Message id:" + msgId);
Intent intent = new Intent();
intent.setAction(CODELABS_ACTION);
intent.putExtra("method", "onMessageSent");
intent.putExtra("msg", "onMessageSent called, Message id:" + msgId);
sendBroadcast(intent);
}
@Override
public void onSendError(String msgId, Exception exception) {
Log.i(TAG, "onSendError called, message id:" + msgId + ", ErrCode:"
+ ((SendException) exception).getErrorCode() + ", description:" + exception.getMessage());
Intent intent = new Intent();
intent.setAction(CODELABS_ACTION);
intent.putExtra("method", "onSendError");
intent.putExtra("msg", "onSendError called, message id:" + msgId + ", ErrCode:"
+ ((SendException) exception).getErrorCode() + ", description:" + exception.getMessage());
sendBroadcast(intent);
}
@Override
public void onTokenError(Exception e) {
super.onTokenError(e);
}
}