flutter 集成极光推送
时间: 2023-07-29 11:06:20 浏览: 152
好的,下面是Flutter集成极光推送的步骤:
1. 在极光官网注册账号并创建应用,获取AppKey。
2. 在Flutter项目中添加极光推送插件,如:jpush_flutter。
3. 在AndroidManifest.xml文件中添加以下代码:
```xml
<!-- 极光推送权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 极光推送服务 -->
<service
android:name="cn.jpush.android.service.PushService"
android:enabled="true"
android:exported="false"
android:process=":pushcore" >
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTER" />
<action android:name="cn.jpush.android.intent.REPORT" />
<action android:name="cn.jpush.android.intent.PushService" />
<action android:name="cn.jpush.android.intent.PUSH_TIME" />
</intent-filter>
</service>
<receiver
android:name="cn.jpush.android.service.PushReceiver"
android:enabled="true"
android:exported="false" >
<intent-filter android:priority="1000">
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
<category android:name="你的包名" />
</intent-filter>
<intent-filter>
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED_PROXY" />
<category android:name="你的包名" />
</intent-filter>
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTRATION" />
<category android:name="你的包名" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
<category android:name="你的包名" />
</intent-filter>
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<category android:name="你的包名" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<data android:scheme="package" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
```
4. 在iOS项目中,到极光官网下载JPush SDK并导入到项目中,在AppDelegate.m文件中添加以下代码:
```objective-c
#import "JPUSHService.h"
// iOS 10 及以上需导入 UserNotifications.framework
#import <UserNotifications/UserNotifications.h>
// Override point for customization after application launch.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 初始化 JPush SDK
[JPUSHService setupWithOption:launchOptions appKey:@"your_appkey" channel:nil apsForProduction:NO];
return YES;
}
// 注册APNs成功并上报DeviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[JPUSHService registerDeviceToken:deviceToken];
}
// 实现注册APNs失败接口
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
}
// 添加处理APNs通知回调方法
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
// iOS 10之前收到通知
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
// Required, iOS 7 Support
[JPUSHService handleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
}
// iOS 10之前收到本地通知
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
// Required, iOS 7 Support
[JPUSHService showLocalNotificationAtFront:notification identifierKey:nil];
}
// iOS 10及以上收到通知
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
NSDictionary * userInfo = notification.request.content.userInfo;
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(UNNotificationPresentationOptionAlert | UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionSound);
}
// iOS 10及以上收到本地通知
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
NSDictionary * userInfo = response.notification.request.content.userInfo;
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler();
}
#endif
```
5. 在Flutter代码中,初始化JPush并监听推送事件:
```dart
import 'package:jpush_flutter/jpush_flutter.dart';
// 初始化JPush
JPush jpush = new JPush();
// 监听推送事件
jpush.addEventHandler(
onReceiveNotification: (Map<String, dynamic> message) async {
print("Flutter onReceiveNotification: $message");
},
onOpenNotification: (Map<String, dynamic> message) async {
print("Flutter onOpenNotification: $message");
},
onReceiveMessage: (Map<String, dynamic> message) async {
print("Flutter onReceiveMessage: $message");
},
);
// 启动JPush
jpush.setup(
appKey: "your_appkey", // 极光官网申请的AppKey
channel: "developer-default", // 渠道,默认值为“developer-default”
production: false, // 是否生产环境
debug: true, // 是否开启调试模式
);
```
以上就是Flutter集成极光推送的步骤,希望能对你有所帮助。
阅读全文