23 мар. 2011 г.

FBconnect Login/Logout

В данной статье будет код только на Objective-C, поэтому полезно знать как вызывать внешние методы из Unity или прочитать статью как это делать. 

Для работы с Facebook я использовал Facebook  iOS SDK.
1. Открываем в XCode проект, расположенный в папке src.
2. Перетаскиваем из него папку Facebook в свой проект.
3. В свойствах проекта в Header Search Path прописываем путь к папке src.
4. Подключаем CoreGraphics framework. 
5. В info.plst добавляем строку "URL Types", внутри "Item 0" создаем строку "URL Schemes" и присваеваем ключу "Item 0" значение fb[ID приложения]

Для того, чтобы запрашивать у пользователя Facebook из приложения доступ к тем или иным функциям, сначала нужно зарегистрировать его на FB. Идем сюда, нажимаем "Создать новое приложение" и заполняем соответствующую информацию.
Для данного примера нам понадобится ID приложения.

Создаем класс со свойством Facebook* fb.
Для логина и выхода используются следующие методы:

- (void)login 
{
    fb = [[Facebook alloc] initWithAppId:@"ID приложения"];
   // используются для проверки заогинен ли пользователь
    // возможно не самый лучший вариант, но другого не нашел
    fb.accessToken = [[NSUserDefaults standardUserDefaults] objectForKey:@"AccessToken"];
    fb.expirationDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"ExpirationDate"];
   // в данном случае пользователя спросят о том, согласен ли он, чтобы
    // наше приложение могло писать ему на стену сообщения без его ведома
    permissions =  [[NSArray arrayWithObjects: @"publish_stream", nil] retain];
   
    // и вызываем диалог для входа
    [fb authorize:permissions delegate:self];
}

- (void)fbDidLogin 
{
    // если пользователь успешно вошел, записываем в память соответствующую информацию.
// Это также необходимо для проверки залогинен ли пользоваетель
    [[NSUserDefaults standardUserDefaults] setObject:fb.accessToken forKey:@"AccessToken"];
[[NSUserDefaults standardUserDefaults] setObject:fb.expirationDate forKey:@"ExpirationDate"];
}

- (void)logout 
{
    [fb logout:self];
[[NSUserDefaults standardUserDefaults] setObject:fb.accessToken forKey:@"AccessToken"];
[[NSUserDefaults standardUserDefaults] setObject:fb.expirationDate forKey:@"ExpirationDate"];
}

// метод используется для проверки залогинен ли пользователь либо нет
- (BOOL)isSessionValid
{
return [fb isSessionValid];
}


Для работы на ранних версиях прошивок (у меня начная с 4.1) в класс Unity AppController.mm необходимо добавить метод:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [[socialNetworks facebook] handleOpenURL:url];
}

В следующем посте постараюсь описать, как без лишних диалогов оставлять публикации на стене пользователя. 

12 мар. 2011 г.

Вызов методов Objective-C из Unity


Если вы счастливый обладатель Pro версии как я, то сделать это довольно просто. Давайте рассмотрим как добавить диалог, предлагающий пользователю проголосовать за наше приложение. Конечно, данный диалог можно без проблем реализовать средствами Unity, но цель данной статьи продемонстрировать вызов из Unity методов Objective-С.

В скрипте внутри Unity пишем:

[System.Runtime.InteropServices.DLLImport("__Internal")]
extern public static void showRateDialog();

И затем в нужном месте вызываем данный метод, например:

if(GUI.Button(buttonRect, "Show Rate Dialog"))
{
    showRateDialog();
}

Делаем Build, открываем проект в XCode, создаем класс 
RateDialog UIViewController <UIAlertViewDelegate>, внутри которого описываем метод, показывающий диалог:

- (void) showDialog(){
    [[[UIAlertView alloc] 
      initWithTitle:@"Like This App?" 
      message:@"Please rate it in the App Store!" 
      delegate:self 
      cancelButtonTitle:@"No Thanks" 
      otherButtonTitles:@"Rate It!", 
      nil] 
     show];
}

Чтобы обработать событие нажатия кнопки "Rate It!" описываем следующий обработчик:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 1) { 
        NSURL *url = [NSURL URLWithString:@"YOUR_URL"]; 
        [[UIApplication sharedApplication] openURL:url]; 
    } 
}

Таким образом, при нажатии на кнопку "Rate It!", откроется Safari со страницей YOUR_URL.
Внутри данного класса или в любом другом месте описываем наш метод:

void showRateDialog(){
    [[RateDialog alloc] init].showDialog();
}

В ближайшее время напишу как к игре добавить интеграцию с Facebook. Для этого как раз понадобится умение вызывать внешние методы.

Используемые статьи:

4 мар. 2011 г.

JellyFresh


Вот и появилась в AppStore наша первая игра. Пока это всего лишь Lite версия и выложили мы её в большей степени для того, чтобы посмотреть как происходит процесс Review игр в AppStore.
Игру можно скачать перейдя по данной ссылке.
Если появятся вопросы по реализации, не стесняйтесь задавать, с радостью отвечу.