iOS integration
(A) Cuando el usuario esta authenticado, hay que llamar esto
Copy [BChatSDK.auth authenticate].thenOnMain(^id(id success) {
// Chat SDK esta listo
return Nil;
}, ^id(NSError * error) {
return Nil;
});
(B) Comenzar una conversacion:
Copy id<PUser> otherUser = [BChatSDK.core userForEntityID:@"userEntityID"];
[BChatSDK.core createThreadWithUsers:@[otherUser] threadCreated:^(NSError * error, id<PThread> thread) {
if (!error) {
UIViewController * vc = [BChatSDK.ui chatViewControllerWithThread:thread];
[self.navigationController pushViewController:vc animated:YES];
}
}];
Los Pasos:
Conectar el Proyecto con Firebase Info
Configurar Chat SDK en el App Delegate Info
Authenticar el usuario con Firebase
Llamar el codigo arriba (A)
Cuando el proceso ha cumplido, llamar el codigo (B)
Tendrias que tener 2 usuarios porque el userEntityID
tiene que existir en Firebase
Lo primero que hago es esto: estos datos fueron probado en tu demo chat y funcionan.
Copy - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//chat sdk
// Create a network adapter to communicate with Firebase
// The network adapter handles network traffic
BConfiguration * config = [BConfiguration configuration];
config.rootPath = @"/v1";
config.allowUsersToCreatePublicChats = NO;
config.showEmptyChats = NO;
config.googleMapsApiKey = @"AIzaSyBUMCx0vctiADu6WbgSpkEDrEf9Ov4naxA";
config.clearDataWhenRootPathChanges = YES;
config.loginUsernamePlaceholder = @"Email";
config.allowUsersToCreatePublicChats = YES;
config.disablePresence = YES;
config.disableProfileUpdateOnAuthentication = NO;
config.developmentModeEnabled = YES;
config.disablePublicThreads = NO;
Luego agrego los siguientes metodos: el metodo sourceApplication depecrated, y el didReceiveRemoteNotification comento el que vos decis que hay que registrar y lo agrego al metodo que esta en el juego.
Copy - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [BChatSDK application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}
-(BOOL) application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
return [BChatSDK application: app openURL: url options: options];
}
-(void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[BChatSDK application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
/*-(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
[BChatSDK application:application didReceiveRemoteNotification:userInfo];
}
*/
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {
_fetchCompletionHandler = completionHandler;
//sdkchat
[BChatSDK application:application didReceiveRemoteNotification:userInfo];
[self startBackgroundProcessing];
}
En tu ejemplo vos lo primero que haces es:
Copy UIViewController * rootViewController = BChatSDK.ui.splashScreenNavigationController;
[self.window setRootViewController:rootViewController];
Lo primero que tengo yo es:
Copy _windowInitialized = NO;
if (!EgoIsRunningInDebugger()) {
EgoStartLogRedirection();
}
godot::StartInstabug("f59d39bdf61e15c7caf71c65b3c681b4", godot::InstabugApi::InvocationEventShake);
[FIRApp configure];
NSArray<NSString *> *commandLineParams = [self _additionalCommandlineParameters];
_godotRuntime = [[GodotRuntime <GLViewDelegate> alloc] initWithAdditionalCommandlineParameters:commandLineParams];
_godotRuntime.delegate = self;
[_godotRuntime preinitializeEngine];
EgoRegisterGodotClasses();
_godotViewController = [[GodotViewController alloc] init];
_godotRuntime.activeViewController = _godotViewController;
UIStoryboard *splashScreenStoryboard = [UIStoryboard storyboardWithName:@"LaunchScreen" bundle:nil];
_splashViewController = [splashScreenStoryboard instantiateInitialViewController];
[_mainViewController addOverlay:_splashViewController];
if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) {
// This will start background processing when the app starts in background
[self startBackgroundProcessing];
return YES;
}
// App is in foreground
EgoApplication::get_singleton()->enter_foreground();
return [self initializeWindow];
}
- (BOOL)initializeWindow {
if (_windowInitialized) {
return NO;
}
_windowInitialized = YES;
[self _initializeSplashScreenCallback];
_mainViewController = [EgoMainViewController new];
_mainViewController.view.frame = [[UIScreen mainScreen] bounds];
[_mainViewController addOverlay:_godotViewController];
_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
_window.rootViewController = _mainViewController;
[_window makeKeyAndVisible];
[_godotRuntime start];
return YES;
Aqui es donde yo debiera hacer el overlay, para ellos pensaba crearme otra viewcontroller, y con botones desde el juego y chat cambiar el rootViewController
Una vez aunteticado en ego-app, lo que tengo que hacer es registrar esos datos en firebase, para ello puedo usar:
Copy BAccountDetails * accountDetails = [BAccountDetails username: @"some.email@domain.com" password:@"some password"];
[BChatSDK.auth authenticate: accountDetails].thenOnMain(...);
Actualmente para crear una cuenta en ego-app no se usa el email, si no el telefono.
Luego para quedar logeado en el chat puedo usar
Copy [BChatSDK.auth authenticate].thenOnMain(^id(id success) {
...
return Nil;
}, Nil);
Es cierto esto?