2010/10/05 gumiStudy #4




                                       mixi




Copyright 2010, All rights reserved.
@weboo

•  1999
•  2006

•  2008
      gumi Platform

•  2009 mixi      

      mixi              


                            2
• 
• 
•  mixi
   — 
   — 
   —            API
   —  C/
     P
   — 
   —     Tips
• 

                      3
• 
     iPhone

              2010   5   mixi Touch




•  2010     Android
•  Windows Phone 7
•  WebKit                             	
                                           4
5
gumi Platform
             mixi
     	
                                  	
 
     	
      GREE Platform
     	
      mixi      for Touch   	
 

• 
       API      API
• 



                                               6
7


                   

                       

	

              	




                           8
Day
 	
   gumi   	
             	
   	




                                       9
10
11
• Android               	
                                          

                                	

•  iPhone / iPod Touch Safari        	




                                              12
• Android                        	
                                                          

                                       	

•  iPhone / iPod Touch Safari                        	

•    UserAgent                	
•    Canvas              Home, Profile      	
•        viewer = owner              Canvas
•    PC/        /Touch                          	
•    Touch             PC                	
•                       Touch                  	
                                                              13
Mobile Phone                                    Third Party Developers
(no JavaScript)
                   Application Proxy                    Application Server

                                                                             XHTML




                   Media Cache Proxy




                                                       swf, gif, jpg, etc.



                                       RESTful API
                     mixi              with 2-legged
                  Social Data
                                                                             DB
                                          OAuth
                                                                                     14
OpenSocial JavaScript API                    mixi
                                                        Social Data



                               Invite
                               Activity
                               etc.
                                          makeRequest


gadgets.util.registerOnLoadHandler()

                                                         SAP Server
         * Rewrite HTML by Shindig
iframe




              16
1.               run_appli.pl                 HTTP        	
2.                iframe              HTML mixi      	
3.               iframe         SAP                            	
4. RESTful API
5. RESTful API             	
6. SAP            HTML
mixi
                                              Social Data

    OpenSocial JavaScript API


                                              RESTful API
                                   Invite     with 2-legged
                                   Activity   OAuth
                                   etc.

<script src=“touch.js”></script>




           * Request with OAuth Signature              DB

                                               SAP Server
                                                              18
•  iframe
          iframe    SAP                 	
•  RESTful API                               	
•           XML            URL     	
•  iframe URL              

   app_id, owner_id, viewer_id          	
•  URL
   OAuth Signature      	
•  Iframe          mixi       js
   Gadgets API User Flow API
•  Person & Friends
•  Persistence
•  Albums

•  Invite
•  Communication Feed	
•  Message
•  Geolocation
•  Request


                          20
21
<?xml version=“1.0” encoding=“utf-8”?>
<Module>
  <ModulePrefs title=“Hello, world!”></ModulePrefs>

  <Content type=“url” view=“touch” href=“http://example.com/” />

</Module>

                url                                   URL




                                                                   22
/           /

<?xml version=“1.0” encoding=“utf-8”?>
<Module>
  <ModulePrefs title=“Hello, world!”>
    <Require feature=“opensocial-0.8” />
  </ModulePrefs>
                                                       PC
  <Content type=“html” view=“home,canvas,profile”><![CDATA[
     <div>Hello, mixi     !</div>
  ]]></Content>

  <Content type=“url” view=“mobile” href=“http://example.com/” />

  <Content type=“url” view=“touch” href=“http://example.com/t/” />

</Module>                                            Touch
                                                                     23
URL

http://example.com/t/




opensocial_app_id=xxx      …     ID
opensocial_owner_id=xxx    …             ID
opensocial_viewer_id=xxx   …             ID
oauth_xxx=xxxxx            … OAuth Signature

              owner_id = viewer_id

                                               24
<!DOCTYPE html>
<html>
<head>
 <meta charset=”UTF-8” />
 <title>        mixi      for Touch</title>

 <script type="text/javascript" charset="UTF-8“
  src="http://mixi.jp/application/touch.js"></script>

</head>

<body>                               mixi          js
          mixi       for Touch
</body>
                                                        UserFlow API
</html>                                                 	

                                                                       25
opensocial.requestShareApp("VIEWER_FRIENDS", null,
function(response) {
  if (response.hadError()) {
    var errCode = response.getErrorCode();
    // do something...
  } else {
    // do something...
  }
});




                                                     26
var params = {};
params[opensocial.Activity.Field.TITLE] = "Hello!";
var activity = opensocial.newActivity(params);

opensocial.requestCreateActivity(
  activity, opensocial.CreateActivityPriority.HIGH, function
(response) {
  if (response.hadError()) {
    var code = response.getErrorCode();
    // do something...
  } else {
    // do something...
  }
});



                                                               27
Geolocation	
mixi.requestFetchGeolocation(function(response) {
  if (response.hadError()) {
    var errCode = response.getErrorCode();
    alert(response.getErrorMessage());
  } else {
    var geo = response.getData();
    if (typeof(geo) != 'undefined') {
      geo.getCurrentPosition(function(position) {
        show_map(position.coords.latitude,
position.coords.longitude);
       });
    } else {
      alert(“error");
    }
  }
});

                                                    28
Android 2.0

navigator.geolocation                                           	
        Gears                                              	
<script src=”gears_init.js”></script>
<script>
if (geo) {
  // do something
} else if (google.gears) {
  geo = google.gears.factory.create('beta.geolocation');
  geo.getCurrentPosition(function(position) {
    show_map(position.latitude, position.longitude);
  });
} else {
  alert("Your browser doesn't support geolocation.");
}
</script>
                                                                     29
http://example.com/t/?oauth_consumer_key=mixi.jp&
oauth_nonce=8edf6cde90a884f2d1af&
oauth_signature=……&
oauth_signature_method=RSA-SHA1&
oauth_timestamp=1277104016&
oauth_version=1.0&
opensocial_app_id=394&
opensocial_owner_id=12345&
opensocial_viewer_id=12345

•  RSA-SHA1
•  PC mixi
• 
   mixi Platform
                                              	
    30
PHP             	
function checkSignature() {
  $request = OAuthRequest::from_request(
                null, null, array_merge($_GET, $_POST));
  $signature_method = new OrkutSignatureMethod();

    //Check the request signature
    @$signature_valid = $signature_method->check_signature(
       $request, null, null, $_GET["oauth_signature"]);

    //Build the output object
    if ($signature_valid != true) {
        header('HTTP', true, 400);
        print "Invalid Signature.";
    }
}


                                                              31
32
•       Chrome    UA


                 --user-agent="Mozilla/5.0 (iPhone; U;
                 CPU iPhone OS 3_1 like Mac OS X;
                 ja-jp) AppleWebKit/528.18 (KHTML,
                 like Gecko) Version/4.0 Mobile/
                 7C144"	




•  Ubuntu                    Safari
                                                         33
•  opensocial-jquery          jQuery
•  mixi Touch        js
     querySelctor CSS Anim.




                                       34
• 
     Android   Location Spoofer




                                  35
•  iframe
•  mixi         Cookie

•  Safari                Cookie
   iframe        set-cookie

• 

            SAP                   mixi
             JavaScript


                                         36
•    POST       set-cookie




•           form            POST
•              Cookie   iframe
                                   37
38
•                   PC/
• 
• 
•  Android

•  mixi Graph API




                          39
40

More Related Content

PDF
What's new in Android P @ I/O Extended Bangkok 2018
PDF
gumiStudy#1 ソーシャルアプリにおけるKVSの利用事例
PDF
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
PDF
gumiStudy#1 キーバリューストアのご紹介と利用時の設計モデルについて
PDF
gumiStudy#3 Django – 次の一歩
KEY
gumiStudy#2 実践 memcached
PPT
A geek's guide to getting hired
What's new in Android P @ I/O Extended Bangkok 2018
gumiStudy#1 ソーシャルアプリにおけるKVSの利用事例
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#1 キーバリューストアのご紹介と利用時の設計モデルについて
gumiStudy#3 Django – 次の一歩
gumiStudy#2 実践 memcached
A geek's guide to getting hired

Similar to gumiStudy#4 mixiアプリのスマートフォン版について (20)

PPTX
MobiWebApp 2012 - Gaps between standard & tool for native and web mobile appl...
PDF
Ideas for addictive series 40 web apps
PPTX
Codestrong 2012 breakout session introduction to mobile web and best practices
PDF
Effectively using Nokia Web Tools 2.0 templates for Series 40 web apps
PDF
오픈소셜 어플리케이션 개발방안 이창명 연구원
PDF
Cross platform mobile web apps
PDF
PhoneGap Day - IBM, PhoneGap and the Enterprise
PDF
Building Cross Platform Mobile Web Apps
PDF
Mobile App Development
PDF
How to pick the right development model for your mobile project?
PDF
HTML5 and the dawn of rich mobile web applications
PDF
Mobile web or native app
PDF
A Snapshot of the Mobile HTML5 Revolution
PDF
Building cross platform mobile web apps
PDF
Building Cloud-Based Cross-Platform Mobile Web Apps
PDF
Mobile Backend Apps and APIs meetup London overview of BaaS APIs and discussi...
PDF
WebSphere as a platform for mobile apps
KEY
LinkedIn Mobile: How do we do it?
KEY
Linkedinmobile 111011223417-phpapp02
PDF
Firefox OS Apps and Web APIs
MobiWebApp 2012 - Gaps between standard & tool for native and web mobile appl...
Ideas for addictive series 40 web apps
Codestrong 2012 breakout session introduction to mobile web and best practices
Effectively using Nokia Web Tools 2.0 templates for Series 40 web apps
오픈소셜 어플리케이션 개발방안 이창명 연구원
Cross platform mobile web apps
PhoneGap Day - IBM, PhoneGap and the Enterprise
Building Cross Platform Mobile Web Apps
Mobile App Development
How to pick the right development model for your mobile project?
HTML5 and the dawn of rich mobile web applications
Mobile web or native app
A Snapshot of the Mobile HTML5 Revolution
Building cross platform mobile web apps
Building Cloud-Based Cross-Platform Mobile Web Apps
Mobile Backend Apps and APIs meetup London overview of BaaS APIs and discussi...
WebSphere as a platform for mobile apps
LinkedIn Mobile: How do we do it?
Linkedinmobile 111011223417-phpapp02
Firefox OS Apps and Web APIs
Ad

Recently uploaded (20)

PDF
NewMind AI Weekly Chronicles – August ’25 Week III
PDF
1 - Historical Antecedents, Social Consideration.pdf
PPTX
Modernising the Digital Integration Hub
PPTX
Configure Apache Mutual Authentication
PDF
A contest of sentiment analysis: k-nearest neighbor versus neural network
PDF
How IoT Sensor Integration in 2025 is Transforming Industries Worldwide
PPTX
TEXTILE technology diploma scope and career opportunities
PPTX
Benefits of Physical activity for teenagers.pptx
PDF
UiPath Agentic Automation session 1: RPA to Agents
PDF
Flame analysis and combustion estimation using large language and vision assi...
PDF
Developing a website for English-speaking practice to English as a foreign la...
PPT
Galois Field Theory of Risk: A Perspective, Protocol, and Mathematical Backgr...
PDF
sustainability-14-14877-v2.pddhzftheheeeee
PPTX
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
PDF
Five Habits of High-Impact Board Members
PDF
Convolutional neural network based encoder-decoder for efficient real-time ob...
DOCX
search engine optimization ppt fir known well about this
PDF
sbt 2.0: go big (Scala Days 2025 edition)
PPT
What is a Computer? Input Devices /output devices
PPT
Module 1.ppt Iot fundamentals and Architecture
NewMind AI Weekly Chronicles – August ’25 Week III
1 - Historical Antecedents, Social Consideration.pdf
Modernising the Digital Integration Hub
Configure Apache Mutual Authentication
A contest of sentiment analysis: k-nearest neighbor versus neural network
How IoT Sensor Integration in 2025 is Transforming Industries Worldwide
TEXTILE technology diploma scope and career opportunities
Benefits of Physical activity for teenagers.pptx
UiPath Agentic Automation session 1: RPA to Agents
Flame analysis and combustion estimation using large language and vision assi...
Developing a website for English-speaking practice to English as a foreign la...
Galois Field Theory of Risk: A Perspective, Protocol, and Mathematical Backgr...
sustainability-14-14877-v2.pddhzftheheeeee
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
Five Habits of High-Impact Board Members
Convolutional neural network based encoder-decoder for efficient real-time ob...
search engine optimization ppt fir known well about this
sbt 2.0: go big (Scala Days 2025 edition)
What is a Computer? Input Devices /output devices
Module 1.ppt Iot fundamentals and Architecture
Ad

gumiStudy#4 mixiアプリのスマートフォン版について

  • 1. 2010/10/05 gumiStudy #4 mixi Copyright 2010, All rights reserved.
  • 2. @weboo •  1999 •  2006 •  2008 gumi Platform •  2009 mixi 
 mixi 
 2
  • 3. •  •  •  mixi —  —  —  API —  C/ P —  —  Tips •  3
  • 4. •  iPhone 2010 5 mixi Touch •  2010 Android •  Windows Phone 7 •  WebKit 4
  • 5. 5
  • 6. gumi Platform mixi GREE Platform mixi for Touch •  API API •  6
  • 7. 7
  • 8. 
 
 8
  • 9. Day gumi 9
  • 10. 10
  • 11. 11
  • 12. • Android 
 •  iPhone / iPod Touch Safari 12
  • 13. • Android 
 •  iPhone / iPod Touch Safari •  UserAgent •  Canvas Home, Profile •  viewer = owner Canvas •  PC/ /Touch •  Touch PC •  Touch 13
  • 14. Mobile Phone Third Party Developers (no JavaScript) Application Proxy Application Server XHTML Media Cache Proxy swf, gif, jpg, etc. RESTful API mixi with 2-legged Social Data DB OAuth 14
  • 15. OpenSocial JavaScript API mixi Social Data Invite Activity etc. makeRequest gadgets.util.registerOnLoadHandler() SAP Server * Rewrite HTML by Shindig
  • 16. iframe 16
  • 17. 1. run_appli.pl HTTP 2. iframe HTML mixi 3. iframe SAP 4. RESTful API 5. RESTful API 6. SAP HTML
  • 18. mixi Social Data OpenSocial JavaScript API RESTful API Invite with 2-legged Activity OAuth etc. <script src=“touch.js”></script> * Request with OAuth Signature DB SAP Server 18
  • 19. •  iframe iframe SAP •  RESTful API •  XML URL •  iframe URL 
 app_id, owner_id, viewer_id •  URL OAuth Signature •  Iframe mixi js Gadgets API User Flow API
  • 20. •  Person & Friends •  Persistence •  Albums •  Invite •  Communication Feed •  Message •  Geolocation •  Request 20
  • 21. 21
  • 22. <?xml version=“1.0” encoding=“utf-8”?> <Module> <ModulePrefs title=“Hello, world!”></ModulePrefs> <Content type=“url” view=“touch” href=“http://example.com/” /> </Module> url URL 22
  • 23. / / <?xml version=“1.0” encoding=“utf-8”?> <Module> <ModulePrefs title=“Hello, world!”> <Require feature=“opensocial-0.8” /> </ModulePrefs> PC <Content type=“html” view=“home,canvas,profile”><![CDATA[ <div>Hello, mixi !</div> ]]></Content> <Content type=“url” view=“mobile” href=“http://example.com/” /> <Content type=“url” view=“touch” href=“http://example.com/t/” /> </Module> Touch 23
  • 24. URL http://example.com/t/ opensocial_app_id=xxx … ID opensocial_owner_id=xxx … ID opensocial_viewer_id=xxx … ID oauth_xxx=xxxxx … OAuth Signature owner_id = viewer_id 24
  • 25. <!DOCTYPE html> <html> <head> <meta charset=”UTF-8” /> <title> mixi for Touch</title> <script type="text/javascript" charset="UTF-8“ src="http://mixi.jp/application/touch.js"></script> </head> <body> mixi js mixi for Touch </body> UserFlow API </html> 25
  • 26. opensocial.requestShareApp("VIEWER_FRIENDS", null, function(response) { if (response.hadError()) { var errCode = response.getErrorCode(); // do something... } else { // do something... } }); 26
  • 27. var params = {}; params[opensocial.Activity.Field.TITLE] = "Hello!"; var activity = opensocial.newActivity(params); opensocial.requestCreateActivity( activity, opensocial.CreateActivityPriority.HIGH, function (response) { if (response.hadError()) { var code = response.getErrorCode(); // do something... } else { // do something... } }); 27
  • 28. Geolocation mixi.requestFetchGeolocation(function(response) { if (response.hadError()) { var errCode = response.getErrorCode(); alert(response.getErrorMessage()); } else { var geo = response.getData(); if (typeof(geo) != 'undefined') { geo.getCurrentPosition(function(position) { show_map(position.coords.latitude, position.coords.longitude); }); } else { alert(“error"); } } }); 28
  • 29. Android 2.0 navigator.geolocation Gears <script src=”gears_init.js”></script> <script> if (geo) { // do something } else if (google.gears) { geo = google.gears.factory.create('beta.geolocation'); geo.getCurrentPosition(function(position) { show_map(position.latitude, position.longitude); }); } else { alert("Your browser doesn't support geolocation."); } </script> 29
  • 31. PHP function checkSignature() { $request = OAuthRequest::from_request( null, null, array_merge($_GET, $_POST)); $signature_method = new OrkutSignatureMethod(); //Check the request signature @$signature_valid = $signature_method->check_signature( $request, null, null, $_GET["oauth_signature"]); //Build the output object if ($signature_valid != true) { header('HTTP', true, 400); print "Invalid Signature."; } } 31
  • 32. 32
  • 33. •  Chrome UA --user-agent="Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1 like Mac OS X; ja-jp) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/ 7C144" •  Ubuntu Safari 33
  • 34. •  opensocial-jquery jQuery •  mixi Touch js querySelctor CSS Anim. 34
  • 35. •  Android Location Spoofer 35
  • 36. •  iframe •  mixi Cookie •  Safari Cookie iframe set-cookie •  SAP mixi JavaScript 36
  • 37. •  POST set-cookie •  form POST •  Cookie iframe 37
  • 38. 38
  • 39. •  PC/ •  •  •  Android •  mixi Graph API 39
  • 40. 40