Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [...] Одно приложение для нескольких соц. сетей (http://www.flasher.ru/forum/showthread.php?t=171168)

Art_133 10.11.2011 11:52

Одно приложение для нескольких соц. сетей
 
Привет.
Меня интересует структура одного приложения (организация системы доступа к api) для нескольких соц. сетей.
К примеру мы выяснили в какой соц сети запущено приложение.
Дальше нам необходимо запостить на стену (vk)/ленту (ok) сообщение.

Как это делаю я.
Создал интерфейс iSocialManager и 2 Класса, которые его имплементируют: VKManager и OKManager.
iSocialManager - содержит весь набор методов, которые реализуют VKManager и OKManager.
Меня смущает то, что в Классе VKManager есть метод (к примеру getImageUploadServer), который не используется в OKManager тем не менее я вынужден его создать в OKManager (хоть и пустым).
Выходит, что OKManager содержит пустые методы, которые используются в VKManager и наоборот.

Как это выглядит на AS:
Код AS3:

if(this.socialType == 'vk')
{
        var socialManager:ISocialManager = new VKManager();
}
else if(this.socialType == 'ok')
{
        var socialManager:ISocialManager = new OKManager();
}
 
socialManager.someFunction();

В голове есть второй вариант:
Код AS3:

if(this.socialType == 'vk')
{
        var vkManager:VKManager = new VKManager();
}
else if(this.socialType == 'ok')
{
        var okManager:OKManager = new OKManager();
}
// некое оповещение
function onShareButtonClick():void
{
        if(this.socialType == 'vk')
        {
                // публикация на стену
                vkManager.wallPost();
        }
        else if(this.socialType == 'ok')
        {
                // Публикация в ленту
                okManager.streamPost();
        }
}

Какой метода "красивее"? Как вы решаете эту задачу?
Не делать, ведь, 2 флешки для 2-х соц сетей.
Спасибо.

GBee 10.11.2011 13:46

2 флэшки и интерфейс

KBAC 10.11.2011 13:46

Первый, на мой взгляд, изящнее.
В интерфейсе имеет смысл указывать только общие методы (postMessage, inviteFriends, showPayment). Как они называются в реальной соц сети нам без разницы, это уже в реализации каждого класса будете закладывать.
Но если в какой-то соц сети есть уникальный метод, который необходимо выполнить, то зная что у вас
Код AS3:

if(this.socialType == 'vk')
{
        var socialManager:ISocialManager = new VKManager();
}

то создав некий уникальный метод в VKManager вы всегда можете обратиться к нему:
Код AS3:

if(this.socialType == 'vk') // или вообще if (socialManager is VKManager)
{
        VKManager(socialManager).uniqueMethod(); // ну или (socialManager as VKManager).uniqueMethod()
}


Art_133 10.11.2011 14:35

GBee, то-есть 2 fla файла но разный MainClass? Расскажите по подробнее.
KBAC, спасибо, отличный пример.

GBee 10.11.2011 15:24

Ага. В принципе.
ИМХО:
Все упирается в "уникальные" возможности соцсети. В ВК больше выбор, сответственно флэшки могут отличаться наличием тех или иных кнопок, вешать все это на призрачную простоту if(socialType="vk") по мне так излишне.

Поэтому должно быть "ядро" программы работающее с интерфейсами (ISocialManager, ISocialFeatures например). Ядро вообще ничего не знает про ВК, ОК, ММ, ФБ. И соцсетевые классы, реализующие эти интерфейсы (VKManager, OKManager).

Разные MainClass, каждый из которых пихает в ядро свой набор классов.
Код AS3:

//VKMainClass
socialManager:ISocialManager = new VKManager();
socialFeatures:ISocialFeatures = new VKFeatures();

Ядро смотрит ISocialFeatures какие фичи доступны и скрывает те или иные кнопки.

Таким образом вы легко прикрутите другие соцсети.

KBAC 10.11.2011 15:54

GBee, но ведь так и получается, только вместо "призрачной простоты if(socialType="vk")" предлагаете использовать разные классы, которые по сути будут выполнять то же самое, ведь всё равно в ядре закладываете весь всевозможный функционал, судя по вашим словам.

В случае с if, прикручивание соц сети будет точно такое же простое (добавляем ещё один else if).
Так что на вкус и цвет) Ну и разные MainClass кому-то могут быть елементарно нагляднее и удобнее, это да.

mikhailk 10.11.2011 16:10

У меня на каждую сеть по одной паре классов (ConnectorAPI и WallPostSender). Приложение само по себе не заморачивается о том, в какой сети открылось и обращается к функционалу через SocialNetwork.connectorAPI и SocialNetwork.wallPostSender.

Определение, в какой сети открылись, в самом начале, тогда же производится и установка всех стетевых параметров.

Кстати, насчет разного функционала сетей - надо гнуть геймдизов на единый интерфейс и единые социальные функции. Основное различие в публикации на стену (ВК) или в ленту новостей (ММ, ОК). Но за счет применения разных текстов вполне можно выкрутиться.

Цитата:

В случае с if, прикручивание соц сети будет точно такое же простое (добавляем ещё один else if).
Так делать не надо, но если хочется именно так, то ставьте по крайней мере switch :)

KBAC 10.11.2011 16:21

Цитата:

Так делать не надо, но если хочется именно так, то ставьте по крайней мере switch
Цитата:

Определение, в какой сети открылись, в самом начале, тогда же производится и установка всех стетевых параметров.
Ну так про определение сети речь и идёт.)

Цитата:

Кстати, насчет разного функционала сетей - надо гнуть геймдизов на единый интерфейс и единые социальные функции.
Это самый верный подход))

GBee 10.11.2011 16:35

Цитата:

Кстати, насчет разного функционала сетей - надо гнуть геймдизов на единый интерфейс и единые социальные функции.
В идеале да, но если во ВК есть лишняя возможность пропиарить приложение, и ее нет в других сетях, то грех ей не пользоваться. Кроме того у каждой соцсети все равно свои специфические ограничения. Например мы не стали заморачиваться с монетизацией прилады в ОК, уж очень буе, а в ВК стали, а в ММ не знаю.

mikhailk 10.11.2011 16:36

Цитата:

Ну так про определение сети речь и идёт.)
Я использую appID, в клиенте внутри прошит конфиг, в котором перечислены все appID, которые могут в него прийти. У меня на каждую сеть по два приложения (стенд и продакшн, значит всего 6 айдишников).

Можно сделать иначе - поставить сервер, к которому приложение после запуска будет отсылать appID, полученный от соцсети, и сервер будет выдавать всю необходимую информацию для работы (где открылись, к каким серверам стучаться, где лежат файлы данных и пр.).

Добавлено через 2 минуты
Цитата:

Например мы не стали заморачиваться с монетизацией прилады в ОК, уж очень буе.
Ну, это наверное в смысле получения потом бабосов?
Потому что с технической точки зрения у меня к ним претензий нет.
Все работает.
Еще бы ММ на мэйлики перешел окончательно и вообще красота.


Цитата:

но если во ВК есть лишняя возможность пропиарить приложение, и ее нет в других сетях, то грех ей не пользоваться
Например?


Часовой пояс GMT +4, время: 08:24.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.