// // NativeUtils.mm // Unity-iPhone // // Created by Suto Atsushi on 2016/06/05. // // #import #import #import #import "UnityAppController.h" #import #import "NativeUtils.h" #include #import @implementation NativeUtils +(NSString *) charToNSString:(char *)value { if (value != NULL) { return [NSString stringWithUTF8String: value]; } else { return [NSString stringWithUTF8String: ""]; } } static NativeUtils *_sharedInstance = nil; + (NativeUtils *) sharedInstance { if (!_sharedInstance) { _sharedInstance = [[NativeUtils alloc] init]; } return _sharedInstance; } -(void) registerNotification { [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions: (UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert ) completionHandler:^(BOOL granted, NSError *_Nullable error) { if (granted) { } }]; [[UIApplication sharedApplication] registerForRemoteNotifications]; } -(void) scheduleNotification: (int) triggerInSeconds message: (NSString*) message alarmId:(NSString *)alarmId { // インスタンス生成 UNMutableNotificationContent *unMutableNotice = [UNMutableNotificationContent new]; unMutableNotice.body = message; unMutableNotice.sound = [UNNotificationSound defaultSound]; UNTimeIntervalNotificationTrigger *triger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:triggerInSeconds repeats:NO]; UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:alarmId content:unMutableNotice trigger:triger]; [UNUserNotificationCenter.currentNotificationCenter addNotificationRequest:request withCompletionHandler:nil]; } - (void) cancelAllNotifications { [[UNUserNotificationCenter currentNotificationCenter] removeAllPendingNotificationRequests]; [[UNUserNotificationCenter currentNotificationCenter] removeAllDeliveredNotifications]; } - (void) showAlert: (NSString*) title message: (NSString*) message { UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; // addActionした順に左から右にボタンが配置されます [alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { }]]; [[[[UIApplication sharedApplication]keyWindow] rootViewController] presentViewController:alertController animated:YES completion:nil]; } @end extern "C"{ int _getHeight() { CGRect cr = [[UIScreen mainScreen] nativeBounds]; return cr.size.height; } int _getWidth() { CGRect cr = [[UIScreen mainScreen] nativeBounds]; return cr.size.width; } int _getPointHeight() { CGRect cr = [[UIScreen mainScreen] bounds]; return cr.size.height; } int _getPointWidth() { CGRect cr = [[UIScreen mainScreen] bounds]; return cr.size.width; } bool _enableReviewWindow() { return [SKStoreReviewController class]; } void _reviewWindow(char* appid) { if([SKStoreReviewController class]){ [SKStoreReviewController requestReview] ; }else{ NSString *str = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=%@&action=write-review",[NativeUtils charToNSString:appid]]; NSURL *URL = [NSURL URLWithString:str]; [[UIApplication sharedApplication] openURL:URL]; } } long _systemClockTime() { struct timeval boottime; int mib[2] = {CTL_KERN, KERN_BOOTTIME}; size_t size = sizeof(boottime); int rc = sysctl(mib, 2, &boottime, &size, NULL, 0); if (rc != 0) { return 0; } return (long)(time(NULL) - boottime.tv_sec); } bool _canOpenTwitter() { if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"twitter://"]]) { return true; } return false; } bool _canOpenFacebook() { if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]]) { return true; } return false; } void _registerNotification() { [[NativeUtils sharedInstance] registerNotification]; } void _scheduleNotification (int triggerInSeconds, char* message, char* alarmId) { [[NativeUtils sharedInstance] scheduleNotification:triggerInSeconds message:[NativeUtils charToNSString:message] alarmId:[NativeUtils charToNSString:alarmId]]; } void _cancelAllNotifications() { [[NativeUtils sharedInstance] cancelAllNotifications]; } void _PlayVibration(int id) { AudioServicesPlaySystemSound(id); } void _PlayVibrationOnce(){ UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:(UIImpactFeedbackStyleMedium)]; [generator impactOccurred]; } void _PlayVibrationOnceStrong(){ UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:(UIImpactFeedbackStyleHeavy)]; [generator impactOccurred]; } void _PlayVibrationOnceWeak(){ UIImpactFeedbackGenerator *generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:(UIImpactFeedbackStyleLight)]; [generator impactOccurred]; } void _PlayVibrationDoubleStrong(){ UINotificationFeedbackGenerator *generator = [[UINotificationFeedbackGenerator alloc] init]; [generator notificationOccurred: UINotificationFeedbackTypeSuccess]; } void _PlayVibrationDoubleWeak(){ UINotificationFeedbackGenerator *generator = [[UINotificationFeedbackGenerator alloc] init]; [generator notificationOccurred: UINotificationFeedbackTypeWarning]; } void _PlayVibrationTriple(){ UINotificationFeedbackGenerator *generator = [[UINotificationFeedbackGenerator alloc] init]; [generator notificationOccurred: UINotificationFeedbackTypeError]; } void _showAlert(char* title, char* message) { [[NativeUtils sharedInstance] showAlert:[NativeUtils charToNSString:title] message:[NativeUtils charToNSString:message]]; } }