Чтобы приложение нужно было добавить на страницу

Только готовые уроки по использованию ВКонтакте API. Flash + PHP + API. НЕ IFrame!

Чтобы приложение нужно было добавить на страницу

Сообщение Александр » 02 окт 2009, 11:25

Как сделать так, чтобы приложение нужно было добавить на страницу

Описываю действия для программирования на Action Script 3, в среде Adobe Flash CS4.

1. Создаём Новый документ.

File -> New -> Flash File (ActionScript 3.0)
Изображение

2. Добавляем тестовое поле, в котором будет отображаться информация о том, установил ли пользователь приложение на свою страницу.

- Выбираем Text Tool на панели инструментов.
- В PROPERTIES устанавливаем Dynamic Text.
Изображение

- Кликаем в любом месте документа (белый прямоугольник), чтобы поместить на него текстовое поле.
- В PROPERTIES устанавливаем Instance name созданного текстового поля. Называем его "pole".
Изображение

3. Сохраняем документ.

File -> Save

Создаем новую папку и сохраняем в неё fla файл. Можно изменить имя, например isAppUser.fla.

4. Создаем Новый as-файл, в котором будем писать код.

File -> New -> ActionScript File
Изображение

5. Пишем код.

  1. package {
  2.     import flash.display.*;
  3.    
  4.     public class Main extends Sprite {
  5.         public function Main():void {
  6.             //считываем переменную, в которой указано, установлено ли приложение на странице
  7.             var params:Object=LoaderInfo(root.loaderInfo).parameters;
  8.             var is_app_user = (params['is_app_user']) ? parseInt(params['is_app_user']) : 0;
  9.             if (is_app_user==1) {
  10.                 // действие, которое будет выполнено, если приложение добавлено на страницу
  11.                 pole.text='Спасибо, что добавили приложение';
  12.                 // выводим текст в "pole"
  13.             } else {
  14.                 // действие, которое будет выполнено, если приложение не добавлено на страницу
  15.                 // выводим текст в "pole"
  16.                 pole.text='Пожалуйста, добавьте приложение на свою страницу';
  17.             }
  18.         }
  19.     }
  20. }


6. Сохраняем as файл.
File -> Save
Сохраняем в ту же папку, в которую сохраняли fla файл.
Назовём его "Main.as".


7. Подключаем Main.as к проекту.
Выбираем вкладку с первым созданным документом, кликаем на пустом месте, чтобы снять выделение с текстового поля, и в PROPERTIES устанавливаем Class "Main" - созданный ранее as файл с кодом.
Изображение

8. Экспортируем приложение.
Нажимаем Ctrl + Enter. Запускается созданное приложение. Чтобы увидеть результат, его нужно загрузить в контакт.
В папке с fla файлом появляется swf файл. Его то и нужно загрузить в контакт.

9. Загружаем приложение в контакт.
- Заходим на сайт вконтакте.
- Переходим на страницу "Приложения".
- Кликаем на "все приложения".
- Кликаем на "создать приложение", вверху страницы.
- Заполняем данные, нажимаем "Перейти к загрузке приложения".
- Нажимаем "Обзор...", выбираем созданный swf файл и нажимаем "Начать загрузку".

Теперь можно проверить работу приложения.
Если вы зайдете в приложение со своего аккаунта, то будет выведен текст "Спасибо, что добавили приложение". т.к. приложение будет установлено на вашей странице. Удалить его со своей страницы, чтобы проверить второй вариант, вы не можете. Но зайдя на приложение с другого аккаунта, не установившего приложение на страницу, вы увидите сообщение "Пожалуйста, добавьте приложение на свою страницу".

Исходник приложения Чтобы увидеть ссылку - зарегистрируйтесь

Я не рекомендую обязывать пользователя добавлять приложение на страницу, полностью ограничивая его функционал. Большинство таких приложений я сразу закрываю. Думаю, что так делаю не только я. Но даже если ваше приложение добавят, то его так же быстро и удалят. Делайте приложения, которые пользователи сами захотят добавить на свою страницу, а о том, что они могут это сделать, вы можете им просто не навязчиво напомнить, не ограничивая весь функционал.

За это сообщение автора Александр поблагодарили - 3:
k51, Skaler, Жека
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



Re: Чтобы приложение нужно было добавить на страницу

Сообщение Boltik » 09 ноя 2009, 09:05

Не пашет. Проверял исходник.
В любом случае пишет:
"Пожалуйста, добавьте приложение на свою страницу"
даже если добавлено, или даже если я загружаю это приложение.
Boltik

 
Сообщения: 1
Зарегистрирован: 09 ноя 2009, 09:03
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Чтобы приложение нужно было добавить на страницу

Сообщение Александр » 09 ноя 2009, 13:32

У меня работает. Только что проверил.
Если хочешь чтобы я помог тебе разобраться с твоей проблемой, то опиши подробнее.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

Re: Чтобы приложение нужно было добавить на страницу

Сообщение Twist4 » 09 ноя 2009, 16:36

у меня тоже не пахало...но я совершенно другим способом пользуюсь))
Twist4
FL Team
FL Team
 
Сообщения: 165
Зарегистрирован: 13 окт 2009, 19:40
Откуда: Кривой Рог
Благодарил (а): 2 раз.
Поблагодарили: 3 раз.

Re: Чтобы приложение нужно было добавить на страницу

Сообщение ZhekaScarFace » 25 ноя 2009, 22:56

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

если кто то по настоящему может хоть чу-чуть мне помочь с этой проблемой, а особенно с работой с файлами строк то прошу ответьте мне по следующим путям
http://vkontakte.ru/id52757124 пишите
или по ICQ
561488763
тоже можете написать
Ну спасибо за внимание
С.У. Евгений
ZhekaScarFace

 
Сообщения: 5
Зарегистрирован: 25 ноя 2009, 22:44
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Вопрос Админу

Сообщение Salty » 18 дек 2009, 12:57

Александр,спасибо у меня получилось ,но я не понимаю как сделать что-бы после добавления приложение показывало аватар и имя (topic3).
Заранее спасибо
http://vkontakte.ru/id27339872
Salty

 
Сообщения: 25
Зарегистрирован: 18 дек 2009, 12:50
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Чтобы приложение нужно было добавить на страницу

Сообщение Александр » 18 дек 2009, 19:41

Salty, видимо проблема в нехватке знаний. Стоит сначала их приобрести, почитав какие-то книги по программированию.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

ПОМОГИТЕ А???

Сообщение Salty » 22 дек 2009, 19:09

А кто-нибудь мне модет помочь? :?: А то я сам только учусь!!! ;) плиззззз
Egorka Salty
http://vkontakte.ru/id27339872
Salty

 
Сообщения: 25
Зарегистрирован: 18 дек 2009, 12:50
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

добавление as2

Сообщение Salty » 27 дек 2009, 09:29

создаете layer 1 на 1 кадре нажимаете F6
переходим снова на 1 кадр и делаем текстовое поле instance mane - wer, нажимаем F9 и вставляем код
stop();

import aclass.DataProvider;//импортируем класс DataProvider, чтобы осуществлять соединение с сервером

wer.selectable = false;//запрет на выделение текстового поля

if (is_app_user == 0) {//проверяем установил ли пользователь приложение к себе на страницу - параметр is_app_user передаётся в флешку автоматически при запуске приложения на сервере. принимает два значения: "0" и "1"
   wer.text = "Добавте приложение к себе на страницу.";
} else {
   dataProvider = new DataProvider();//если приложение установлено, то создаём новый экземпляр объекта DataProvider для доступа к различным методам


   _root.play();//если всё ok, то переходим на следующий кадр

}


далее создаем папку на рабочем столе "aclass" создаем ActionScript File назовем его dataProvider
вставляем туда код
ort aclass.MD5;

class aclass.DataProvider {
  var API_ID = "ид приложения";
  var API_SECRET = "секретный ключ";
  var API_SERVER_URL = "http://api.vkontakte.ru/api.php";
  var API_REQUEST_METHOD = "POST";
  var API_TEST_MODE = false;
 
  private var _viewer_id: Number;
  private var _request_params: Array;
 
  function DataProvider()
  {
    _request_params = new Array();
    _request_params["api_id"] = API_ID;
    _viewer_id = parseInt(_root.viewer_id);
    if (API_TEST_MODE) {
      _viewer_id = 6492;
      _request_params["test_mode"] = "1";
    }
  }

   /*Запрос к аудиозаписям */
   public function getAudios(onComplete:Function)
  {
    _sendRequest("getAudios", {onComplete: onComplete})
  }
 
 
  /********************
   * Private methods
   ********************/
   
/**
  * Sends request to the server
  *
  */
  private function _sendRequest(method:String, options:Object)
  {
    var response:XML = new XML();
    response.ignoreWhite = true;
    if (options.onComplete);
    response.onLoad = options.onComplete;
    var request:LoadVars = new LoadVars();
   
    var request_params:Object = {
      method: method
    };
   
    for (var key in _request_params)
    {
      request_params[key] = _request_params[key];
    }
    for (var key in options.params)
    {
      request_params[key] = options.params[key];
    }
   
    request["sig"] = _generate_signature(request_params);
    for (var key in request_params)
    {
      request[key] = request_params[key];
    }
   
    request.sendAndLoad(API_SERVER_URL, response, API_REQUEST_METHOD);
  }
 
 
/**
  * Sorts array by keys
  *
  */
  private function _sort_array_by_keys(aInput: Object)
  {
    var aTemp = new Array();
    for (var sKey:String in aInput)
      aTemp.push([sKey, aInput[sKey]]);
   
    aTemp.sort(function () {
      return arguments[0][0] < arguments[1][0]}
      );
    var aOutput = new Array();
    for (var i:Number = aTemp.length - 1; i >= 0; i--)
    {
      aOutput[aTemp[i][0]] = aTemp[i][1];
    }
    return aOutput;
  }
 
  /**
   * Generates request signature
   *
   */
  private function _generate_signature(request_params) {
    var signature = "";
    var sorted_array = _sort_array_by_keys(request_params);
   
    // Note: make sure that the signature parameter is not already included in
    //       request_params array.
    for (var key in sorted_array)
      signature = key + "=" + sorted_array[key] + signature;
     
    signature = _viewer_id + signature + API_SECRET;
    return MD5.encrypt(signature);
  }
}

сохраняем его в папку ''aclass''
далее создаем ActionScript файл с именем MD5 ставляем туда код
class aclass.MD5 {
    public static function encrypt(data: String) {
      var x=Array();
      var k,AA,BB,CC,DD,a,b,c,d;
      var S11=7, S12=12, S13=17, S14=22;
      var S21=5, S22=9 , S23=14, S24=20;
      var S31=4, S32=11, S33=16, S34=23;
      var S41=6, S42=10, S43=15, S44=21;

      data = Utf8Encode(data);

      x = ConvertToWordArray(data);

      a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;

      for (k=0;k<x.length;k+=16) {
          AA=a; BB=b; CC=c; DD=d;
          a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
          d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
          c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
          b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
          a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
          d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
          c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
          b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
          a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
          d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
          c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
          b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
          a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
          d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
          c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
          b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
          a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
          d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
          c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
          b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
          a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
          d=GG(d,a,b,c,x[k+10],S22,0x2441453);
          c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
          b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
          a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
          d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
          c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
          b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
          a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
          d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
          c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
          b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
          a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
          d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
          c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
          b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
          a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
          d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
          c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
          b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
          a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
          d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
          c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
          b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
          a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
          d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
          c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
          b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
          a=II(a,b,c,d,x[k+0], S41,0xF4292244);
          d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
          c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
          b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
          a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
          d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
          c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
          b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
          a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
          d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
          c=II(c,d,a,b,x[k+6], S43,0xA3014314);
          b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
          a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
          d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
          c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
          b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
          a=AddUnsigned(a,AA);
          b=AddUnsigned(b,BB);
          c=AddUnsigned(c,CC);
          d=AddUnsigned(d,DD);
      }

      var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);

      return temp.toLowerCase();
    }

    private static function RotateLeft(lValue, iShiftBits) {
        return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
    }

    private static function AddUnsigned(lX,lY) {
        var lX4,lY4,lX8,lY8,lResult;
        lX8 = (lX & 0x80000000);
        lY8 = (lY & 0x80000000);
        lX4 = (lX & 0x40000000);
        lY4 = (lY & 0x40000000);
        lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
        if (lX4 & lY4) {
            return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
        }
        if (lX4 | lY4) {
            if (lResult & 0x40000000) {
                return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
            } else {
                return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
            }
        } else {
            return (lResult ^ lX8 ^ lY8);
        }
    }

    private static function F(x,y,z) { return (x & y) | ((~x) & z); }
    private static function G(x,y,z) { return (x & z) | (y & (~z)); }
    private static function H(x,y,z) { return (x ^ y ^ z); }
    private static function I(x,y,z) { return (y ^ (x | (~z))); }

    private static function FF(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    }

    private static function GG(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    }

    private static function HH(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    }

    private static function II(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    }

    private static function ConvertToWordArray(string) {
        var lWordCount;
        var lMessageLength = string.length;
        var lNumberOfWords_temp1=lMessageLength + 8;
        var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
        var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
        var lWordArray=Array(lNumberOfWords-1);
        var lBytePosition = 0;
        var lByteCount = 0;
        while ( lByteCount < lMessageLength ) {
            lWordCount = (lByteCount-(lByteCount % 4))/4;
            lBytePosition = (lByteCount % 4)*8;
            lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
            lByteCount++;
        }
        lWordCount = (lByteCount-(lByteCount % 4))/4;
        lBytePosition = (lByteCount % 4)*8;
        lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
        lWordArray[lNumberOfWords-2] = lMessageLength<<3;
        lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
        return lWordArray;
    }

    private static function WordToHex(lValue) {
        var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
        for (lCount = 0;lCount<=3;lCount++) {
            lByte = (lValue>>>(lCount*8)) & 255;
            WordToHexValue_temp = "0" + lByte.toString(16);
            WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
        }
        return WordToHexValue;
    }

    private static function Utf8Encode(string) {

        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    }
}


сохраняем в папку "aclass" нажимаем Ctrl + Enter и заливаем ВКонтакт)))
Последний раз редактировалось Salty 27 дек 2009, 09:32, всего редактировалось 1 раз.
Salty

 
Сообщения: 25
Зарегистрирован: 18 дек 2009, 12:50
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Чтобы приложение нужно было добавить на страницу

Сообщение 9GYAR » 02 янв 2010, 08:34

помоги мне у мне что то не пашет и вообще я бы хотел создать нормальное приложение создать
но вот затрудняюсь в adobe flash cs4 сложно вырисовывать фигуры а других программ не знаю
помогите пожалуйста
заранее благодарен если что то пишите сюда http://vkontakte.ru/id22546713
9GYAR

 
Сообщения: 1
Зарегистрирован: 02 янв 2010, 08:30
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

След.

Вернуться в Уроки по использованию ВКонтакте API



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron