1.前提准备
在极光开发者服务注册并登录,在首页添加应用,如下图:
2.Flutter集成Jpush
在工程pubspec.yaml添加Jpush依赖,如下图: Android 在 /android/app/build.gradle 中添加下列代码:
android: {
....
defaultConfig {
applicationId "替换成自己应用 ID"
...
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a',
}
manifestPlaceholders = [
JPUSH_PKGNAME : applicationId,
JPUSH_APPKEY : "appkey",
JPUSH_CHANNEL : "developer-default",
]
}
}
IOS 在 xcode8 之后需要点开推送选项: TARGETS -> Capabilities -> Push Notification 设为 on 状态
3.flutter客户端集成极光SDK
在main.dart文件导包
import 'package:flutter_jpush/flutter_jpush.dart';
在APP初始化main.dart添加如下:
static JPush jpush = null;
initJPushState() async{
if(jpush != null) return jpush;
jpush = JPush();
try {
if (Platform.isAndroid == true) {
jpush.addEventHandler(
onReceiveNotification: onPushForAndroid,
onOpenNotification: onResumeForAndroid,
onReceiveMessage: (Map<String, dynamic> message) async {
print("flutter onReceiveMessage: $message");
},
);
} else if (Platform.isIOS == true) {
jpush.addEventHandler(
onReceiveNotification: onPush,
onOpenNotification: onResume,
onReceiveMessage: (Map<String, dynamic> message) async {
print("flutter onReceiveMessage: $message");
},
);
}
} on Exception {
print("--->获取平台版本失败");
}
jpush.setup(
appKey: "866ac8de67c493b8183cbe68",
channel: "developer-default",
production: false,
debug: true
);
jpush.applyPushAuthority(
new NotificationSettingsIOS(sound: true, alert: true, badge: true)
);
jpush.getRegistrationID().then((value) =>
{
});
}
在没有后台的情况下,可以在官网进行推送测试,如下图:
4.JAVA服务端集成极光SDK
添加maven依赖 将下边的依赖条件放到你项目的 maven pom.xml 文件里
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jpush-client</artifactId>
<version>3.4.8</version>
</dependency>
创建一个极光推送的Util类
APP_KEY :在极光开放平台创建应用,极光提供的AppKey MASTER_SECRET :在极光开放平台创建应用,极光提供的Master Secret(注意粘贴过来的有没有空格,有的话删掉) JPUSH_URL:极光推送地址(https://api.jpush.cn)
注:IOS端需通过创建IosAlert并setAlert()设置推送的title和body, Android直接setAlert和setTitle即可
package com.bfj.mobilepush;
import cn.jiguang.common.ClientConfig;
import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.*;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.configurationprocessor.json.JSONException;
import java.util.HashMap;
import java.util.Map;
import static cn.jpush.api.push.model.notification.PlatformNotification.ALERT;
public class JGMobilePush {
protected static final Logger LOG = LoggerFactory.getLogger(JGMobilePush.class);
protected static final String APP_KEY = "在极光开放平台创建应用,极光提供的AppKey";
protected static final String MASTER_SECRET = "在极光开放平台创建应用,极光提供的Master Secret";
protected static final String JPUSH_URL = "https://api.jpush.cn";
public static void sendPushWithCustomConfig(String title, String body, String endpointArn, Map<String, String> info) throws JSONException {
ClientConfig config = ClientConfig.getInstance();
config.setPushHostName(JPUSH_URL);
JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY, null, config);
PushPayload payload = getPushPayload(title, body, endpointArn, info);
try {
PushResult result = jpushClient.sendPush(payload);
LOG.info("Got result - " + result);
} catch (APIConnectionException e) {
LOG.error("Connection error. Should retry later. ", e);
} catch (APIRequestException e) {
LOG.error("Error response from JPush server. Should review and fix it. ", e);
LOG.info("HTTP Status: " + e.getStatus());
LOG.info("Error Code: " + e.getErrorCode());
LOG.info("Error Message: " + e.getErrorMessage());
LOG.info("Msg ID: " + e.getMsgId());
}
}
public static PushPayload getPushPayload(String title, String body, String endpointArn, Map<String, String> info) {
IosAlert alert = IosAlert.newBuilder().setTitleAndBody(title, null, body).build();
return PushPayload.newBuilder()
.setPlatform(Platform.android_ios())
.setAudience(Audience.registrationId(endpointArn))
.setNotification(Notification.newBuilder()
.addPlatformNotification(AndroidNotification.newBuilder().setAlert(body)
.setTitle(title)
.addExtras(info)
.build())
.addPlatformNotification(IosNotification.newBuilder()
.setAlert(alert)
.setSound(title)
.addExtras(info)
.build())
.build())
.setOptions(Options.newBuilder()
.setApnsProduction(true)
.build())
.build();
}
}
主程序调用sendPushWithCustomConfig()方法即可进行推送
5.集成Android
添加应用成功后,如下图: 选择消息推送,点击下一步,如下图: 填写应用包名,Android应用程序的包名(Package Name),在 AndroidManifest.xml 里配置使用的(一旦配置成功不可更改),点击下一步即可使用。
6.集成IOS
创建应用程序 ID
登陆 苹果开发者网站 进入开发者账户。
从开发者账户页面左侧入口进入 “Certificates, IDs & Profiles” 页面。
创建 App ID,填写 App ID 的 NAME 和 Bundle ID(如果 ID 已经存在可以直接跳过此步骤)。 注: 此处需要指定具体的 Bundle ID 不要使用通配符。 为 App 开启 Push Notification 功能。如果是已经创建的 App ID 也可以通过设置开启 Push Notification 功能。
填写好以上属性后,点击 “Continue”,确认 AppId 属性的正确性,点击 “Register”,注册 AppId 成功。
鉴权方式的配置
极光官网应用的鉴权信息一旦配置,只能用相同 bundleID 的鉴权信息进行更新,无法修改为其他的 bundleID,请在配置前仔细检查 bundleID 是否正确
方式一:通过 .p12 证书鉴权 如果你之前没有创建过 Push 证书或者是要重新创建一个新的,请在证书列表下面新建。 新建证书需要注意选择 APNs 证书种类。如图 APNs 证书有开发(Development)和生产(Production)两种。 注:开发证书用于开发调试使用;生产证书既能用于开发调试,也可用于产品发布。此处我们选择生产证书为例。 点击 “Continue”, 之后选择该证书准备绑定的 AppID。 再点 “Continue” 会让你上传 CSR 文件。( CSR 文件会在下一步创建) 打开系统自带的 KeychainAccess 创建 Certificate Signing Request。如下图操作:
填写“用户邮箱”和“常用名称” ,并选择“存储到磁盘”,证书文件后缀为 .certSigningRequest 。
回到浏览器中 CSR 上传页面,上传刚刚生成的后缀为 .certSigningRequest 的文件。 生成证书成功后,点击 “Download” 按钮把证书下载下来,是后缀为 .cer 的文件。
双击证书后,会在 “KeychainAccess” 中打开,选择左侧“钥匙串”列表中“登录”,以及“种类”列表中“我的证书”,找到刚才下载的证书,并导出为 .p12 文件。如下图:
在极光控制台上,进入你应用的应用设置中 iOS 的鉴权方式选择 “证书”,上传刚才导出的 .p12 证书。极光会在后台为你的应用进行鉴权。 Apple 的生产推送证书允许用于开发环境的推送,勾选将生产证书用于开发环境,开发者可以仅上传生产证书,即可在官网推送平台处选择开发环境做推送,不用再生成和上传开发证书。
Provisioning Profile 的创建
创建 Provisioning Profile 的前提,已在 Apple Developer 网站创建待发布应用所使用的 Bundle ID 的 App ID,且为该 App ID 创建了 iOS Development 证书。
在苹果开发者账号的 Provisioning Profile 页面点击下图按钮,创建 Provisioning Profile
选择此 Provisioning Profile 的环境后点击 [Continue]:
选择要创建 Provisioning Profile 的 App ID 后点击 [Continue]:
选择所属的开发者证书,(这里创建了多个开发者证书,建议只创建一个,方便管理)为了方便,选择了 [Select All],再点击 [Continue] 进入下一步:
为该 Provisioning Profile 选择将要安装的设备(一般选择 [Select All]),点击 [Continue]:
给该 Provisioning Profile 填写 Profile Name,点击 [generate] 完成创建。
填写完 Profile Name 后点击 [generate] 完成创建,之后点击 [DownLoad] 下载 Provisioning Profile
双击下载下来的 Provisioning Profile,添加到 xcode。
XCode 的证书配置教程
参照 iOS SDK 集成指南集成 JPush SDK 和上传了推送用到的 p12 证书后在编译运行前需要先配置一下证书,步骤如下:
打开 xxx-info.plist 的 Bundle identifier 项把上传到 JPush 控制台的 bundle id 填写进去:
点击项目,选择目标 TARGETS 后进入 Build Setting 界面,搜索 “Code signing”,按照下图配置
|