美文网首页
远程推送

远程推送

作者: JaneEyre3X | 来源:发表于2017-06-29 09:38 被阅读0次

    首先 ,先导入第三方 UMessage_Sdk_1.5
    在 AppDelegate.m中导入头文件 #import "UMessage.h"

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

    [UMessage startWithAppkey:@"your appkey" launchOptions:launchOptions];

    //注册通知,如果要使用category的自定义策略,可以参考demo中的代码。

    [UMessage registerForRemoteNotifications];

    //iOS10必须,加下面这段代码。

    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];

    center.delegate=self;

    UNAuthorizationOptions types10=UNAuthorizationOptionBadge|  UNAuthorizationOptionAlert|UNAuthorizationOptionSound;

    [center requestAuthorizationWithOptions:types10    completionHandler:^(BOOL granted, NSError * _Nullable error) {

    if (granted) {

    //点击允许

    //这里可以添加一些自己的逻辑

    } else {

    //点击不允许

    //这里可以添加一些自己的逻辑

    }

    }];

    return YES;

    }

    //iOS10新增:处理前台收到通知的代理方法

    -(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{

    NSDictionary * userInfo = notification.request.content.userInfo;

    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

    //应用处于前台时的远程推送接受

    //关闭U-Push自带的弹出框

    [UMessage setAutoAlert:NO];

    //必须加这句代码

    [UMessage didReceiveRemoteNotification:userInfo];

    }else{

    //应用处于前台时的本地推送接受

    }

    //当应用处于前台时提示设置,需要哪个可以设置哪一个

    completionHandler(UNNotificationPresentationOptionSound|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionAlert);

    }

    //iOS10新增:处理后台点击通知的代理方法

    -(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{

    NSDictionary * userInfo = response.notification.request.content.userInfo;

    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

    //应用处于后台时的远程推送接受

    //必须加这句代码

    [UMessage didReceiveRemoteNotification:userInfo];

    }else{

    //应用处于后台时的本地推送接受

    }

    }

    在ViewController.m

    创建 imgViewController

    创建 LoadData.h

    #import<Foundation/Foundation.h>

    #import<sqlite3.h>

    #import "Model.h"

    @interface LoadData : NSObject{

    sqlite3 *ss;

    }

    //单例类

    +(instancetype)initShaertData;

    //打开数据库

    -(void)initOpenData;

    //添加

    -(void)addData:(Model *)mm;

    //查询

    -(NSMutableArray *)getAllData;

    //关闭

    -(void)close;

    在LoadData.m

    #import "LoadData.h"

    static LoadData *ld = nil;

    @implementation LoadData

    //单例类

    +(instancetype)initShaertData{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

    ld = [[LoadData alloc]init];

    });

    return ld;

    }

    +(instancetype)allocWithZone:(struct _NSZone *)zone{

    if (!ld) {

    ld = [super allocWithZone:zone];

    }

    return ld;

    }

    -(id)copy{

    return self;

    }

    -(id)mutableCopy{

    return self;

    }

    //打开数据库

    -(void)initOpenData{

    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];

    NSString *newpath = [path stringByAppendingPathComponent:@"sy.db"];

    NSLog(@"new == %@",newpath);

    if (sqlite3_open([newpath UTF8String],&(ss)) == SQLITE_OK) {

    NSLog(@"打开了");

    [self initTable];

    }

    }

    //初始化

    -(void)initTable{

    const char *sql = "create table if not exists zoo(id intager primary key, imgName text,img BLOB)";

    sqlite3_stmt *stmt;

    sqlite3_prepare(ss, sql, -1, &stmt, nil);

    sqlite3_step(stmt);

    sqlite3_finalize(stmt);

    }

    //添加

    -(void)addData:(Model *)mm{

    const char *sql = "insert into zoo values(null,?,?)";

    sqlite3_stmt *stmt;

    sqlite3_prepare(ss, sql, -1, &stmt, nil);

    sqlite3_bind_text(stmt, 1, [mm.imgName UTF8String], -1, SQLITE_TRANSIENT);

    sqlite3_bind_text(stmt, 2, [mm.img bytes],  (int)[mm.img length], SQLITE_TRANSIENT);

    if (sqlite3_step(stmt) == SQLITE_DONE) {

    NSLog(@"添加成功");

    }

    sqlite3_finalize(stmt);

    }

    //查询

    -(NSMutableArray *)getAllData{

    const char *sql = "select *from zoo";

    sqlite3_stmt *stmt;

    sqlite3_prepare(ss, sql, -1, &stmt, nil);

    NSMutableArray *arr = [[NSMutableArray alloc]init];

    while (sqlite3_step(stmt) == SQLITE_ROW) {

    Model *mm = [[Model alloc]init];

    mm.imgName = [NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 1)];

    mm.img = [NSData dataWithBytes:sqlite3_column_blob(stmt, 2) length:sqlite3_column_bytes(stmt, 2)];

    [arr addObject:mm];

    }

    sqlite3_finalize(stmt);

    return arr;

    }

    //关闭

    -(void)close{

    sqlite3_close(ss);

    }

    创建新的 Model

    在 .h中写入以下

    #import<Foundation/Foundation.h>

    @interface Model : NSObject

    @property(nonatomic,strong)NSString *imgName;

    @property(nonatomic,strong)NSData *img;

    @end

    相关文章

      网友评论

          本文标题:远程推送

          本文链接:https://www.haomeiwen.com/subject/xutucxtx.html