165 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
		
			
		
	
	
			165 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
| 
								 | 
							
								// ==============================================
							 | 
						||
| 
								 | 
							
								//  U3DConsent.mm
							 | 
						||
| 
								 | 
							
								//  UnityFramework
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  Created by EricHu on 2022/11/17.
							 | 
						||
| 
								 | 
							
								//  Copyright © 2022 guru. All rights reserved.
							 | 
						||
| 
								 | 
							
								// ==============================================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#import <Foundation/Foundation.h>
							 | 
						||
| 
								 | 
							
								#import <GuruConsent/GuruConsent-Swift.h>
							 | 
						||
| 
								 | 
							
								#import "UnityAppController+UnityInterface.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@interface U3DConsent : NSObject
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//+ (void)requestGDPR: (NSString *)deviceId :(int) debugGeo;
							 | 
						||
| 
								 | 
							
								//+ (UIViewController *) getUnityViewController;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static NSString *gameobjectName;
							 | 
						||
| 
								 | 
							
								static NSString *callbackName;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@implementation U3DConsent
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+(UnityAppController *)GetAppController
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return (UnityAppController*)[UIApplication sharedApplication].delegate;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+(UIViewController *) getUnityViewController {
							 | 
						||
| 
								 | 
							
								    return UnityGetGLViewController();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 请求GDPR的接口
							 | 
						||
| 
								 | 
							
								+(void) requestGDPR: (NSString *)deviceId :(int)debugGeography
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								//     NSLog(@"--- deviceId: %@", deviceId);
							 | 
						||
| 
								 | 
							
								    if(deviceId.length){
							 | 
						||
| 
								 | 
							
								        NSLog(@"--- set debug device Id: %@", deviceId);
							 | 
						||
| 
								 | 
							
								        GuruConsentDebugSettings *debug = [[GuruConsentDebugSettings alloc] init];
							 | 
						||
| 
								 | 
							
								        debug.testDeviceIdentifiers = @[deviceId];
							 | 
						||
| 
								 | 
							
								        debug.geography = (GuruConsentDebugSettingsGeography)debugGeography;
							 | 
						||
| 
								 | 
							
								        GuruConsent.debug = debug;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // 开始请求
							 | 
						||
| 
								 | 
							
								    [GuruConsent startFrom: [U3DConsent getUnityViewController]
							 | 
						||
| 
								 | 
							
								                   success:^(enum GuruConsentGDPRStatus status) {
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								        if (@available(iOS 14, *)) {
							 | 
						||
| 
								 | 
							
								//            NSLog(@"ATT 结果: %lu",
							 | 
						||
| 
								 | 
							
								//                  (unsigned long)ATTrackingManager.trackingAuthorizationStatus);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        NSString *msg = @"";
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        switch (status) {
							 | 
						||
| 
								 | 
							
								            case GuruConsentGDPRStatusUnknown:
							 | 
						||
| 
								 | 
							
								                NSLog(@"--- GuruConsentGDPRStatusUnknown");
							 | 
						||
| 
								 | 
							
								                msg = @"GuruConsentGDPRStatusUnknown";
							 | 
						||
| 
								 | 
							
								                break;
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								            case GuruConsentGDPRStatusRequired:
							 | 
						||
| 
								 | 
							
								                NSLog(@"--- GuruConsentGDPRStatusRequired");
							 | 
						||
| 
								 | 
							
								                msg = @"GuruConsentGDPRStatusRequired";
							 | 
						||
| 
								 | 
							
								                break;
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								            case GuruConsentGDPRStatusNotRequired:
							 | 
						||
| 
								 | 
							
								                NSLog(@"--- GuruConsentGDPRStatusNotRequired");
							 | 
						||
| 
								 | 
							
								                msg = @"GuruConsentGDPRStatusNotRequired";
							 | 
						||
| 
								 | 
							
								                break;
							 | 
						||
| 
								 | 
							
								                    
							 | 
						||
| 
								 | 
							
								            case GuruConsentGDPRStatusObtained:
							 | 
						||
| 
								 | 
							
								                NSLog(@"--- GuruConsentGDPRStatusObtained");
							 | 
						||
| 
								 | 
							
								                msg = @"GuruConsentGDPRStatusObtained";
							 | 
						||
| 
								 | 
							
								                break;
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								            default:
							 | 
						||
| 
								 | 
							
								                break;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        NSLog(@"GDPR 结果: %ld", (long)status);
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        // 发送数据
							 | 
						||
| 
								 | 
							
								        [U3DConsent sendMessage: [U3DConsent buildDataString: (int)status andMessage:msg]];
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								    } failure:^(NSError * _Nonnull error) {
							 | 
						||
| 
								 | 
							
								        NSLog(@"失败: %@", error);
							 | 
						||
| 
								 | 
							
								        [U3DConsent sendMessage: [U3DConsent buildDataString: -100 andMessage:@"request failed"]];
							 | 
						||
| 
								 | 
							
								    }];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 字符串转换
							 | 
						||
| 
								 | 
							
								+(const char*) stringToChar: (NSString *) str{
							 | 
						||
| 
								 | 
							
								    return [str cStringUsingEncoding:NSASCIIStringEncoding];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+(char*) finalChar: (NSString *) string
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    const char *tmpChar = [string cStringUsingEncoding:NSASCIIStringEncoding];
							 | 
						||
| 
								 | 
							
								       
							 | 
						||
| 
								 | 
							
								    if (string == NULL)
							 | 
						||
| 
								 | 
							
								        return NULL;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    char* res = (char*)malloc(strlen(tmpChar) + 1);
							 | 
						||
| 
								 | 
							
								    strcpy(res, tmpChar);
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    return res;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 构建数据
							 | 
						||
| 
								 | 
							
								+(NSString *) buildDataString: (int)status andMessage: (NSString *)msg{
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    NSString *jsonString = [NSString stringWithFormat: @"{\"action\":\"gdpr\",\"data\":{\"status\":%d,\"msg\":\"%@\"}}", status, msg];
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								//    NSDictionary *dict = @{@"action" : @"gdpr"};
							 | 
						||
| 
								 | 
							
								//    [dict setValue:@{@"status" : [NSString stringWithFormat:@"%d",status], @"msg": msg} forKey:@"data"];
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//    NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
							 | 
						||
| 
								 | 
							
								//    NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    return jsonString;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 向Unity发送数据
							 | 
						||
| 
								 | 
							
								+(void) sendMessage: (NSString *)msg
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								//     NSLog(@"--- unityInitSDK222: %@:%@", gameobjectName, callbackName);
							 | 
						||
| 
								 | 
							
								    if(gameobjectName != nil && callbackName != nil){
							 | 
						||
| 
								 | 
							
								        char *t1 = [U3DConsent finalChar: gameobjectName];
							 | 
						||
| 
								 | 
							
								        char *t2 = [U3DConsent finalChar: callbackName];
							 | 
						||
| 
								 | 
							
								        char *t3 = [U3DConsent finalChar: msg];
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        UnitySendMessage(t1, t2, t3);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								@end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								    // 请求GDPR
							 | 
						||
| 
								 | 
							
								    void unityRequestGDPR(const char * value, int debugGeo){
							 | 
						||
| 
								 | 
							
								        [U3DConsent requestGDPR:[NSString stringWithUTF8String:value] :debugGeo];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    // 初始化SDK
							 | 
						||
| 
								 | 
							
								    void unityInitSDK(const char *gameobject, const char *method){
							 | 
						||
| 
								 | 
							
								//         NSLog(@"--- unityInitSDK111: %s:%s", gameobject, method);
							 | 
						||
| 
								 | 
							
								        gameobjectName = [NSString stringWithUTF8String:gameobject];
							 | 
						||
| 
								 | 
							
								        callbackName = [NSString stringWithUTF8String:method];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |