/************************************************************
|
* * Hyphenate CONFIDENTIAL
|
* __________________
|
* Copyright (C) 2016 Hyphenate Inc. All rights reserved.
|
*
|
* NOTICE: All information contained herein is, and remains
|
* the property of Hyphenate Inc.
|
* Dissemination of this information or reproduction of this material
|
* is strictly forbidden unless prior written permission is obtained
|
* from Hyphenate Inc.
|
*/
|
|
#import <UserNotifications/UserNotifications.h>
|
#import "EaseSDKHelper.h"
|
|
#import "EaseConvertToCommonEmoticonsHelper.h"
|
|
//@interface EMChatImageOptions : NSObject<IChatImageOptions>
|
//
|
//@property (assign, nonatomic) CGFloat compressionQuality;
|
//
|
//@end
|
|
static EaseSDKHelper *helper = nil;
|
|
@implementation EaseSDKHelper
|
|
@synthesize isShowingimagePicker = _isShowingimagePicker;
|
|
- (instancetype)init
|
{
|
self = [super init];
|
if (self) {
|
[self commonInit];
|
}
|
|
return self;
|
}
|
|
+(instancetype)shareHelper
|
{
|
static dispatch_once_t onceToken;
|
dispatch_once(&onceToken, ^{
|
helper = [[EaseSDKHelper alloc] init];
|
});
|
|
return helper;
|
}
|
|
#pragma mark - private
|
|
- (void)commonInit
|
{
|
|
}
|
|
#pragma mark - app delegate notifications
|
|
/** @brief 注册App切入后台和进入前台的通知 */
|
- (void)_setupAppDelegateNotifications
|
{
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
selector:@selector(appDidEnterBackgroundNotif:)
|
name:UIApplicationDidEnterBackgroundNotification
|
object:nil];
|
|
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
selector:@selector(appWillEnterForeground:)
|
name:UIApplicationWillEnterForegroundNotification
|
object:nil];
|
}
|
|
- (void)appDidEnterBackgroundNotif:(NSNotification*)notif
|
{
|
[[EMClient sharedClient] applicationDidEnterBackground:notif.object];
|
}
|
|
- (void)appWillEnterForeground:(NSNotification*)notif
|
{
|
[[EMClient sharedClient] applicationWillEnterForeground:notif.object];
|
}
|
|
#pragma mark - register apns
|
|
/** @brief 注册远程通知 */
|
- (void)_registerRemoteNotification
|
{
|
UIApplication *application = [UIApplication sharedApplication];
|
application.applicationIconBadgeNumber = 0;
|
|
if (NSClassFromString(@"UNUserNotificationCenter")) {
|
[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert completionHandler:^(BOOL granted, NSError *error) {
|
if (granted) {
|
#if !TARGET_IPHONE_SIMULATOR
|
dispatch_async(dispatch_get_main_queue(), ^{
|
[application registerForRemoteNotifications];
|
});
|
#endif
|
}
|
}];
|
return;
|
}
|
|
if([application respondsToSelector:@selector(registerUserNotificationSettings:)])
|
{
|
UIUserNotificationType notificationTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
|
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:notificationTypes categories:nil];
|
[application registerUserNotificationSettings:settings];
|
}
|
|
#if !TARGET_IPHONE_SIMULATOR
|
if ([application respondsToSelector:@selector(registerForRemoteNotifications)]) {
|
[application registerForRemoteNotifications];
|
}else{
|
UIRemoteNotificationType notificationTypes = UIRemoteNotificationTypeBadge |
|
UIRemoteNotificationTypeSound |
|
UIRemoteNotificationTypeAlert;
|
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:notificationTypes];
|
}
|
#endif
|
}
|
|
#pragma mark - init Hyphenate
|
|
- (void)hyphenateApplication:(UIApplication *)application
|
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
appkey:(NSString *)appkey
|
apnsCertName:(NSString *)apnsCertName
|
otherConfig:(NSDictionary *)otherConfig
|
{
|
[self _setupAppDelegateNotifications];
|
[self _registerRemoteNotification];
|
|
EMOptions *options = [EMOptions optionsWithAppkey:appkey];
|
options.apnsCertName = apnsCertName;
|
options.isAutoAcceptGroupInvitation = NO;
|
if ([otherConfig objectForKey:kSDKConfigEnableConsoleLogger]) {
|
options.enableConsoleLog = YES;
|
}
|
|
BOOL isHttpsOnly = NO;
|
if ([otherConfig objectForKey:@"httpsOnly"]) {
|
isHttpsOnly = [[otherConfig objectForKey:@"httpsOnly"] boolValue];
|
}
|
options.usingHttpsOnly = isHttpsOnly;
|
|
NSUserDefaults *udefaults = [NSUserDefaults standardUserDefaults];
|
if ([udefaults objectForKey:@"autoTransferMessageFile"]) {
|
options.isAutoTransferMessageAttachments = [[udefaults objectForKey:@"autoTransferMessageFile"] boolValue];
|
}
|
if ([udefaults objectForKey:@"autoDownloadMessageThumbnail"]) {
|
options.isAutoDownloadThumbnail = [[udefaults objectForKey:@"autoDownloadMessageThumbnail"] boolValue];
|
}
|
|
BOOL sandBox = [otherConfig objectForKey:@"easeSandBox"] && [[otherConfig objectForKey:@"easeSandBox"] boolValue];
|
if (!sandBox) {
|
[[EMClient sharedClient] initializeSDKWithOptions:options];
|
}
|
}
|
|
- (void)hyphenateApplication:(UIApplication *)application
|
didReceiveRemoteNotification:(NSDictionary *)userInfo
|
{
|
[[EMClient sharedClient] application:application didReceiveRemoteNotification:userInfo];
|
}
|
|
- (void)dealloc
|
{
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
}
|
|
#pragma mark - send message
|
|
+ (EMMessage *)getTextMessage:(NSString *)text
|
to:(NSString *)to
|
messageType:(EMChatType)messageType
|
messageExt:(NSDictionary *)messageExt
|
|
{
|
NSString *willSendText = [EaseConvertToCommonEmoticonsHelper convertToCommonEmoticons:text];
|
EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:willSendText];
|
NSString *from = [[EMClient sharedClient] currentUsername];
|
EMMessage *message = [[EMMessage alloc] initWithConversationID:to from:from to:to body:body ext:messageExt];
|
message.chatType = messageType;
|
|
return message;
|
}
|
|
+ (EMMessage *)getCmdMessage:(NSString *)action
|
to:(NSString *)to
|
messageType:(EMChatType)messageType
|
messageExt:(NSDictionary *)messageExt
|
cmdParams:(NSArray *)params
|
{
|
EMCmdMessageBody *body = [[EMCmdMessageBody alloc] initWithAction:action];
|
if (params) {
|
body.params = params;
|
}
|
NSString *from = [[EMClient sharedClient] currentUsername];
|
EMMessage *message = [[EMMessage alloc] initWithConversationID:to from:from to:to body:body ext:messageExt];
|
message.chatType = messageType;
|
|
return message;
|
}
|
|
+ (EMMessage *)getLocationMessageWithLatitude:(double)latitude
|
longitude:(double)longitude
|
address:(NSString *)address
|
to:(NSString *)to
|
messageType:(EMChatType)messageType
|
messageExt:(NSDictionary *)messageExt
|
{
|
EMLocationMessageBody *body = [[EMLocationMessageBody alloc] initWithLatitude:latitude longitude:longitude address:address];
|
NSString *from = [[EMClient sharedClient] currentUsername];
|
EMMessage *message = [[EMMessage alloc] initWithConversationID:to from:from to:to body:body ext:messageExt];
|
message.chatType = messageType;
|
|
return message;
|
}
|
|
+ (EMMessage *)getImageMessageWithImageData:(NSData *)imageData
|
to:(NSString *)to
|
messageType:(EMChatType)messageType
|
messageExt:(NSDictionary *)messageExt
|
{
|
EMImageMessageBody *body = [[EMImageMessageBody alloc] initWithData:imageData displayName:@"image"];
|
NSString *from = [[EMClient sharedClient] currentUsername];
|
EMMessage *message = [[EMMessage alloc] initWithConversationID:to from:from to:to body:body ext:messageExt];
|
message.chatType = messageType;
|
|
return message;
|
}
|
|
+ (EMMessage *)getImageMessageWithImage:(UIImage *)image
|
to:(NSString *)to
|
messageType:(EMChatType)messageType
|
messageExt:(NSDictionary *)messageExt
|
{
|
NSData *data = UIImageJPEGRepresentation(image, 1);
|
|
return [self getImageMessageWithImageData:data to:to messageType:messageType messageExt:messageExt];
|
}
|
|
+ (EMMessage *)getVoiceMessageWithLocalPath:(NSString *)localPath
|
duration:(NSInteger)duration
|
to:(NSString *)to
|
messageType:(EMChatType)messageType
|
messageExt:(NSDictionary *)messageExt
|
{
|
EMVoiceMessageBody *body = [[EMVoiceMessageBody alloc] initWithLocalPath:localPath displayName:@"audio"];
|
body.duration = (int)duration;
|
NSString *from = [[EMClient sharedClient] currentUsername];
|
EMMessage *message = [[EMMessage alloc] initWithConversationID:to from:from to:to body:body ext:messageExt];
|
message.chatType = messageType;
|
|
return message;
|
}
|
|
+ (EMMessage *)getVideoMessageWithURL:(NSURL *)url
|
to:(NSString *)to
|
messageType:(EMChatType)messageType
|
messageExt:(NSDictionary *)messageExt
|
{
|
EMVideoMessageBody *body = [[EMVideoMessageBody alloc] initWithLocalPath:[url path] displayName:@"video.mp4"];
|
NSString *from = [[EMClient sharedClient] currentUsername];
|
EMMessage *message = [[EMMessage alloc] initWithConversationID:to from:from to:to body:body ext:messageExt];
|
message.chatType = messageType;
|
|
return message;
|
}
|
|
@end
|