はじめに
iOS11よりTwitter、Facebook、Flickr、Vimeoアプリのサインイン連携がセキュリティの観点からできなくなりました。
他のサードパーティーアプリと同様の扱いになりました。
アプリでTwitterシェアやFacebookシェアなどをSLComposeViewControllerで実装している場合に挙動が変わります。
ios11のGM版(製品リリース手前)で確認するとアプリがインストールしてあってもFacebook,Twitterのシェアボタンが機能しません。
→GM版のバグな可能性が高いため、正式リリース(9/19)したら改めて動作確認すると良いと思います。
Social accounts have been removed from Settings iOS 11. Third-party apps no longer have access to those signed-in accounts,
appleinsider参考リンク
http://appleinsider.com/articles/17/06/05/apple-drops-twitter-facebook-flickr-vimeo-integration-in-ios-11
SLComposeViewControllerで実装した場合の挙動の違いについて
Twitter,Facebookなどのアプリがインストールされている場合はSLComposeViewControllerの実装のままで問題なく動作するはずです。
→ベータ版、GM版では動いていないので不安
いずれにせよSLComposeViewControllerは推奨されていないため、移行対応を行ったほうが間違いありません。
https://stackoverflow.com/questions/45450300/twitter-sharing-in-ios-11
アプリをインストールしていない場合にシェアが連携できないためできなくなります。
特に実装アプリで処理を入れていない場合は、ボタンを押しても無反応になります。
(アプリをインストールしていないユーザは少ないので特に無視でも問題ないかもしれませんが、ストアに誘導など入れると親切です)
対応方法について
Twitter,Facebookの対応についてのみ記載します。
基本的には公式の各SDKを利用して行えば問題ありません。
(またはWebのSafariなどに認証を投げてシェアさせる方法もできます)
Twitter対応方法
公式で移行手順についてアナウンスしています。
TwitterKit3を使ってくださいとのことです。
https://dev.twitter.com/twitterkit/ios/migrate-social-framework
Facebook対応方法
公式ページよりFacebookSDKでシェアを実装してください。
https://developers.facebook.com/docs/ios/getting-started?locale=ja_JP
はじめに
FacebookのGraphAPIのバージョンの期限切れ予告メッセージが来ているため対応をメモします
2.3バージョンを使っている場合、期限がすぎると使えなくなりますよという知らせです。
「Reminder: Graph API v2.3 will be deprecated on July 10, 2017. Please use the API Upgrade Tool to understand how this might impact your app. For more details see the changelog. 」
GraphAPIの更新履歴と更新期限
更新履歴も期限も公式ページに記載していますので確認してください。
https://developers.facebook.com/docs/apps/changelog
大体リリースして2年で期限が設置されているため、毎回気を使って変更する必要がありますね。
アップグレードについて
WebもiOSもAndroidも比較的新しいバージョンから更新する場合はあまり修正する内容はありません。
たまにバージョンに寄り大幅に更新されている場合があります、と入ってもメジャーバージョンがアップグレードしている場合がほとんどです。
それ以外のマイナーバージョンのアップでは基本的にSDKを差し替えれば動作するはずですのでアップグレードの方法を公式ページで確認して更新してください。
iOS対応
iOSのFacebookSDK内でGraphAPIを使っています。どのバージョンを使っているかは更新履歴に記載されています。
現在のFacebookのSDKがGraphAPIのどのバージョンを使っているかを確認して、アップグレードしてください。
更新履歴
https://developers.facebook.com/docs/ios/change-log-4x
アップグレード方法
https://developers.facebook.com/docs/ios/upgrading-4x
Android対応
AndroidのFacebookSDK内でGraphAPIを使っています。どのバージョンを使っているかは更新履歴に記載されています。
現在のFacebookのSDKがGraphAPIのどのバージョンを使っているかを確認して、アップグレードしてください。
AndroidはGradleでインストールしている場合、Gradleファイル内でバージョンが確認できます。
更新履歴
https://developers.facebook.com/docs/android/change-log-4x
アップグレード方法
https://developers.facebook.com/docs/android/upgrading-4x
使っているGraphAPIの簡単な調べ方
SDKの更新履歴から追っていくのも大変ですね。Facebookの管理画面から対象のアプリを選択すると使用しているGraphAPIのバージョンがすぐに確認できます。
https://developers.facebook.com/apps/
アプリの詳細ページ
ここのバージョンを見たほうが早いですね。ここでGraphAPIのバージョンが2.3であれば期限があと少しで切れるのでアップグレードしてください。
2.4も10月に切れるので更新作業ができるだけはやく更新作業が必要です。汗
GraphAPI変更点
FacebookのAPI仕様変更についてメモしておきます
2015/4より1.0が新規・既存アプリで終了し2.0が適用されています
変更点で多くのアプリで影響を受けそうなのは、ユーザIDがグローバルなIDを取得できていたところが、アプリ専用のIDになる、友達リストが全友達ではなくアプリ利用者のみという仕様変更が大きいのかなと思います。
ユーザIDについては仕様変更をしらずに使っているとあとで痛い目にあいそうですね。
引用元:
https://developers.facebook.com/docs/apps/changelog?locale=ja_JP
v1.0からv2.0への変更点
・アプリ専用のユーザーID: 利用者の情報の保護を強化するため、利用者が、グラフAPIをv2.0にアップグレードしたアプリにログインする場合、Facebookではその利用者の元のIDではなく、アプリ専用IDを発行するようになりました。ただし、以前にアプリにログインしていた利用者の場合、ユーザーIDは変更されません。
・アプリの友達: /me/friendsエンドポイントには、利用者の全友達リストが含まれなくなりました。 その代わり、その利用者の友達のうち、同じアプリを使用している友達のリストが返されます。
・/{id}/pictureを除く、グラフAPI v2.0への要求にはすべて、アクセストークンが必要です。
・/me/permissionsエンドポイントの形式が更新されました。 アクセス権限とそれらの権限が許可されているかまたは拒否されているかを示すステータスフィールドがリストに含まれるようになりました。
v2.0で利用可能な新機能
・タグ付け可能な友達API: 「/me/taggable_friends」と呼ばれる新しいエンドポイントを追加しました。このエンドポイントを使用すると、友達がアプリを使用していなくても、その友達をタグ付けした記事を生成できます。 このタグ付け可能な友達APIを使用する場合、アプリのレビューが必要になります。
・招待可能な友達API: 「/me/invitable_friends」と呼ばれる新しいエンドポイントを追加しました。このエンドポイントを使用すると、友達リストを生成し、カスタムインターフェイスを通じてゲームに招待できます。 このAPIは、Facebookキャンバス上のゲームアプリの場合だけ利用できます。
・ソーシャルコンテキストAPI: オブジェクトおよびアプリに新しいエンドポイントを追加しました。このエンドポイントを使用すると、あるオブジェクトに関する利用者の友達のアクションを表示できます。 たとえば、/{movie-id}?fields=contextエンドポイントを見ると、自分の友達のうち誰がこの映画を観たかわかります。 または、/{game-app-id}?fields=contextエンドポイントを見ると、自分の友達のうち誰がこのゲームで遊んだかがわかります。 ゲームアプリの例は、ゲーム間での相互宣伝を行う場合に、特に便利です。
・ビジネスマッピングAPI: このリリースにより、1つのビジネスでたくさんのアプリを所有することができます。 アプリ専用のユーザーIDを発行する動きと共に、「/me/ids_for_business」と呼ばれる新しいエンドポイントの導入を進めています。このエンドポイントを使用すると、1つのユーザーIDと、ユーザービジネスマネージャ内に定義されたビジネスと同じものに関連付けられた複数のアプリを、相互に関連付けることができます。
・タグ付けされたスポットAPI: 「/me/tagged_places」と呼ばれる新しいエンドポイントの追加を進めています。このエンドポイントを使用すると、写真、動画、近況、リンク内で、利用者がタグ付けしたすべてのスポットにアクセスできます。 このエンドポイントに関連付けられた新しい権限は次の通りです。 user_tagged_places.
アプリ専用のユーザーIDについて
上記変更点に記載している通りのため、既存アプリでバージョン1.0を使用している場合にバージョン2.0に切り替えても、グローバルなユーザIDをそのまま使用してくれるようです。
新規アプリでバージョン2.0以降から使用する場合は、グローバルIDではなくアプリ専用のIDが使われるということです。
そのため、ユーザの識別でユーザIDを使用しているだけであれば影響はないです。
Facebook広告の画像規約についてと対策についてメモ
Facebookの広告を表示する際に、画像を設定する場合、画像による広告ができないような制限が入っている。
画像の登録自体はどんな画像でもできるが、一定時間した際に、画像に問題があるとFacebookに通知が届く。
画像に表示している文字が全体の20%を超えているためとのこと。。
通知メッセージ:
あなたの広告は、Facebook広告ガイドラインに違反しているため承認されませんでした。広告の画像や動画サムネイルに、 面積の20%を超えるテキストを使うことはできません。ただし、削除される前の広告で得られたインプレッション数やクリック数 に対しては請求されますので、ご注意ください。広告の何%がテキストかを調べるには、ヘルプセンターのこちらを参照するか、 またはグリッドツールに広告の画像をアップロードしてください。Facebook広告ガイドラインをご覧になり、広告が承認されなか ったのは誤りだとお考えの場合は、お問い合わせください.
改善(画像に含む文字率が20%とは)
目視で20%位まで下げて再度広告を表示しても、再度違反メッセージが届いてしまう事がある。
Facebookが提供しているグリッドツールで審査に通るかがわかるのでこれを使い確認すると良い。
どうやら、25分割にしたグリッドに6つ以上のグリッドに文字が掛かっているだけでもアウトの様。。
確認用グリッドツール:
https://www.facebook.com/ads/tools/text_overlay?_rdr
facebookのアクセストークンの有効期限についてメモ
facebookにはログイン認証が承認されるとアクセストークンが取得でき、2012年まではオフラインアクセストークンは一度取得すると無期限で使用可能だったが、facebookの仕様が改変され現在は廃止されている。
オフラインアクセストークンは一度ユーザから許可を取り取得すると、ユーザがアプリを起動していない場合にもfacebook情報を取得することが可能。現在は無期限ではなく、デフォルトでは期限は2時間程とのこと。
2時間を無期限にすることはできないが、apiが用意されており、以下クエリをfacebookに投げると2ヶ月に延長することが可能。ただしユーザがパスワード変更した場合やアプリを削除すればアクセストークンも使用不可になる。
https://graph.facebook.com/oauth/access_token? client_id=APP_ID& client_secret=APP_SECRET& grant_type=fb_exchange_token& fb_exchange_token=EXISTING_ACCESS_TOKEN
opauthライブラリのfacebook認証では、アクセストークンの期限は2ヶ月となる。
アプリの仕様でログインしてない場合にも情報を取得する必要がある場合には、アクセストークンをDBなどに格納しておくと良い。
opauthライブラリを使用してFacebook認証を実装する手順をメモ
[FuelPHP]opauthライブラリで速攻SNS認証(Twitter,Facebook,Google etc)で投稿しているopauthライブラリの実装方法について。
opauthはPHPのフレームワーク毎にパッケージ化されており、FuelPHPも既にパッケージ化されている。
https://github.com/andreoav/fuel-opauth
※バグ改修、コードリファクリングで何度か更新されているっぽい
一度大元となるFuelPHPのopauthパッケージをプロジェクトに導入すると、あとは各ストラテジのファイルを入れ込むだけで簡単に各種SNS認証が導入できる。
2013/1現在のFuelPHPのopauthパッケージには、既にFacebook,Twitterの二つのストラテジは入れ込まれている。
今回はとりあえずFacebookの認証を動くところまで試す。取り込み手順はREADMEのHow to use の4手順。
プロジェクトフォルダ(プロジェクト名)は「basedemo」としてローカル環境で試す
導入手順 ※導入はおよそ10分程
手順1.Facebook管理者ページの設定
Facebook開発者ページからアプリ登録を行い、「App ID」「App Secret」を取得する。
https://developers.facebook.com/apps
[Facebookでログインするウェブサイト]の[Webサイト]には手順5で作成するController_AuthクラスのAction_Loginメソッドにストラテジ文字列を引数としたアドレスがログインページとなるので以下のようにする。
http://[サイトパス]/auth/login/facebook/
※ローカル環境の実行の場合はlocalhostで問題なし
今回は「http://localhost/basedemo/auth/login/facebook/」を設定する
この[Webサイト]パスを間違えると下記のようなエラーが出るので注意
—————————————————————————————————————————————
API Error Code: 191
API Error Description: The specified URL is not owned by the application
Error Message: Invalid redirect_uri: 指定されたURLは、アプリケーションの設定で許可されていません。
—————————————————————————————————————————————
手順2.プロジェクトにopauthライブラリをgitからclonesで取り込む ※How to use の1
cd basedemo/fuel/packages/ git clone git://github.com/andreoav/fuel-opauth.git opauth
※zipファイルでダウンロードしてフォルダをパッケージ配下に配置しても同様
手順3.opauth.php設定ファイルの作成 ※How to useの2
opauth/config/opauth.phpをbasedemo/fuel/app/config/にコピーする ※新規作成でも良い
<?php 'path' => '/basedemo/auth/login/', 'security_salt' => 'testtesttest', // デフォルトで設定されている値と違うものにする ※同じ場合動作しない 'callback_url' => '/basedemo/auth/callback/', 'Strategy' => array( 'Facebook' => array( 'app_id' => 'APP_ID', // 手順1で取得した「App ID」の値を設定 'app_secret' => 'APP_SECRET' // 手順1で取得した「App Secret」の値を設定 ), ),
security_saltはデフォルトと違う値かどうかをコード上チェックしているため、別の適当な値を設定すること。
今後ストラテジを追加する場合にはFacebookと同様に追加して記載する。
Twitterの場合:
'Twitter' => array( 'key' => 'KEY', 'secret' => 'SECRET' ),
pathとcallback_urlについてはサイト直下に作成している場合は「How to useの2」に記載されている通りpath[/auth/login/]、callback_url[/auth/callback/]でいいが、今回はlocalhost直下ではなくlocalhost/basedemoなので[/basedemo]を付け忘れないこと。今回ここで4時間ぐらい無駄にハマった・・・
それぞれController_AuthクラスのAction_Authメソッド、Action_Callbackメソッドを呼び出している。
手順4.config.phpの設定 ※How to useの3
opauthをパッケージとして読み込む設定をする
<!--?php 'always_load' =--> array( 'packages' => array( 'opauth', ), ),
手順5.コントローラファイルの作成 ※How to useの4
auth.phpを[/fuel/app/classes/controller]へ新規作成する
あとは「How to useの2」のコードをそのままコピペ
<!--?php class Controller_Auth extends Controller { private $_config = null; public function before() { if(!isset($this--->_config)) { $this->_config = Config::load('opauth', 'opauth'); } } /** * eg. http://www.exemple.org/auth/login/facebook/ will call the facebook opauth strategy. * Check if $provider is a supported strategy. */ public function action_login($_provider = null) { if(array_key_exists(Inflector::humanize($_provider), Arr::get($this->_config, 'Strategy'))) { $_oauth = new Opauth($this->_config, true); } else { return Response::forge('Strategy not supported'); } } // Print the user credentials after the authentication. Use this information as you need. (Log in, registrer, ...) public function action_callback() { $_opauth = new Opauth($this->_config, false); switch($_opauth->env['callback_transport']) { case 'session': session_start(); $response = $_SESSION['opauth']; unset($_SESSION['opauth']); break; } if (array_key_exists('error', $response)) { echo '<strong style="color: red;">Authentication error: </strong> Opauth returns error auth response.'." \n"; } else { if (empty($response['auth']) || empty($response['timestamp']) || empty($response['signature']) || empty($response['auth']['provider']) || empty($response['auth']['uid'])) { echo '<strong style="color: red;">Invalid auth response: </strong>Missing key auth response components.'." \n"; } elseif (!$_opauth->validate(sha1(print_r($response['auth'], true)), $response['timestamp'], $response['signature'], $reason)) { echo '<strong style="color: red;">Invalid auth response: </strong>'.$reason.". \n"; } else { echo '<strong style="color: green;">OK: </strong>Auth response is validated.'." \n"; /** * It's all good. Go ahead with your application-specific authentication logic */ } } return Response::forge(var_dump($response)); } }
動作確認
「http://localhost/basedemo/auth/login/facebook/」を実行してfacebookのログインページに遷移すればOK。あとはログインして完了すると「OK: Auth response is validated.」が表示されれば成功。
画面上はfacebookからのレスポンス情報が表示されているはず。
最後に・・・
単に配置しただけで認証のみは簡単に行えた。あとはDBに情報格納やらプロジェクトにあったコールバック処理、遷移に変えればよさそう。
その他ストラテジの追加は下記公式サイトよりストラテジファイルをダウンロードして配置して、config設定を行い多少修正すれば、おそらくすぐに実装が可能。
公式サイト:http://opauth.org/
あれ、ログアウト処理ないね。。セッション値を削除すればいいかな。
前回はopauthについて投稿しましたが、他にも使い勝手がよさそうなのがありました。
HybridAuthというものでこちらもopauth同様のことができるそうです。
ただHybridAuthにはAPIの処理の実装もされているため、今後SNSのAPIを使用する予定がある場合には、こちらの方がよさそうです。
ただFuelPHPにはまだライブラリとして提供はされていないので、公式サイトから必要なファイルをFuelPHPの規約にあわせて取り込むことが必要そう。
opauthライブラリについてメモ
opauthライブラリを実装して簡単に各種SNSのoauth認証が実装できる
基本的に認証のみを実装するため、その他にAPIなど呼び出す必要がある場合は独自で実装する必要がありそう。
面倒な認証を速攻で実装できるので使用する価値はありそう。
FuelPHPも対応しているので、Githubから落としてそれぞれのファイルを規定の場所に配置して設定をしたらできそう。
設定は各種SNSサイトで登録すると取得できるアプリケーションIDやらアプリケーションシークレットやら。
大元のファイルを配置してFuelPHPに取り込んだら後は取り込みたいストラテジー(各種SNSのことのよう)のソースを落として配置したら追加していくこともできそう。
公式サイト:http://opauth.org/
FuelPHPコード:https://github.com/andreoav/fuel-opauth
<<対応フレームワーク>> ※公式サイトから抜粋
- vanilla (plain) PHP applications (of course)
- CakePHP (maintained by uzyn)
- CodeIgniter (maintained by destinomultimedia)
- CodeIgniter (maintained by mcatm)
- FuelPHP (maintained by andreoav)
- Yii Framework (maintained by kahwee)
<<対応SNS>> ※公式サイトから抜粋
Strategy | Info | Download | |
---|---|---|---|
![]() |
uzyn/opauth-facebook | ZIP / TAR | Try me! |
![]() |
uzyn/opauth-google | ZIP / TAR | Try me! |
![]() |
uzyn/opauth-twitter | ZIP / TAR | Try me! |
![]() |
fancyguy/opauth-bitbucket | ZIP / TAR | Try me! |
![]() |
rasa/opauth-disqus | ZIP / TAR | |
![]() |
pocket7878/opauth-do | ZIP / TAR | |
![]() |
pocket7878/opauth-flickr | ZIP / TAR | Try me! |
![]() |
pocket7878/opauth-foursquare | ZIP / TAR | |
![]() |
uzyn/opauth-github | ZIP / TAR | Try me! |
![]() |
muhdazrain/opauth-instagram | ZIP / TAR | Try me! |
![]() |
uzyn/opauth-linkedin | ZIP / TAR | Try me! |
![]() |
uzyn/opauth-live | ZIP / TAR | Try me! |
![]() |
ritou/opauth-mixi | ZIP / TAR | |
![]() |
24hours/opauth-paypal | ZIP / TAR | |
![]() |
dgrabla/opauth-sinaweibo | ZIP / TAR | |
![]() |
uzyn/opauth-openid | ZIP / TAR | Try me! |
coffee-break
Don't write code that useless.
1日5杯はコーヒー、カフェオレ飲みます。狭心症のため安静にします☆松本 雄貴
Kotlinでサービスリリース目指す!
iOSでチャットアプリ作成中。自然言語解析LSIを習得中
Mac / Android・iOS / Rails / Oracle
2017年 Lpic L2取得
2012年 Android技術者資格取得
2010年 OracleMasterGold10g取得
2008年 CCNAQiitaもたまに投稿
https://qiita.com/y-matsumoto東京近郊で常駐開発探してる方はこちらよりご連絡ください
SES企業でパートナー会社を探している企業様はこちらよりご連絡ください
スプリットカメラ iOS / Android
音声認識で聞いた日付から曜日当てアプリ Android
ソーシャルタイマー Android
カテゴリー
- ActiveRecord (2)
- Android (52)
- AndroidStudio (10)
- Ansible (1)
- AWS (1)
- Bash (18)
- Blog (7)
- BootStrap (1)
- CentOS (16)
- Chef (1)
- css (2)
- Eclipse (5)
- error (1)
- Facebook (2)
- Firebase (1)
- FuelPHP (16)
- Git (22)
- GitHub (3)
- Gradle (2)
- GraphAPI (1)
- Grunt (1)
- heroku (2)
- illustrator (1)
- iOS (17)
- Java (4)
- Jenkins (1)
- jQuery (3)
- Kotlin (2)
- Mac (22)
- nginx (1)
- Node.js (3)
- peco (1)
- php (5)
- Python (1)
- Rails (16)
- Ruby (11)
- shell (1)
- SNS (1)
- Swift (2)
- tmux (2)
- Vagrant (6)
- Vim (6)
- windows (2)
- WordPress (3)
- zsh (4)
- フリーランス (1)
- ライブラリ (1)
- 勉強会 (2)
- 宣伝 (1)
- 未分類 (2)
最近の投稿
- [MAC]HighSierraでgitプッシュエラー「Unable to negotiate with xxx.xxx.xxx.xxx port xx: no matching cipher found. Their offer: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se fatal: Could not read from remote repository.」
- [iOS]iOS11からFacebook,Twitter連携(シェアなど)廃止の対応方法
- [iOS]速報2017AppleSpecialEventのiOS11、iPhone8など発表内容について
- [iOS][Firebase]The default Firebase app has not yet been configured. Add `[FIRApp configure];
- [iOS]2017年9月リリースのiOS11で開発者が対応するべきこと
- 今人気の現金化サービスCASH(キャッシュ)を使ったレビュー
- [Pandoc][Mac]pandocでmarkdownからwordファイル作成
- [Android]映画サマーウォーズの聞いた日付(誕生日)から曜日当てをアプリ音声認識で簡単に実現
- [Android]起動しているActivityを取得するadb shell コマンド
- [Android][Kotlin]kotlin学習で参考になるサイト一覧
2023年6月 月 火 水 木 金 土 日 « 5月 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 アーカイブ
- 2018年5月
- 2017年9月
- 2017年8月
- 2017年7月
- 2017年6月
- 2017年5月
- 2017年2月
- 2017年1月
- 2016年12月
- 2016年7月
- 2016年6月
- 2016年1月
- 2015年12月
- 2015年11月
- 2015年10月
- 2015年9月
- 2015年8月
- 2015年7月
- 2015年6月
- 2015年5月
- 2015年4月
- 2015年3月
- 2015年2月
- 2015年1月
- 2014年12月
- 2014年11月
- 2014年6月
- 2014年5月
- 2014年4月
- 2014年3月
- 2014年2月
- 2014年1月
- 2013年12月
- 2013年11月
- 2013年9月
- 2013年8月
- 2013年7月
- 2013年6月
- 2013年5月
- 2013年4月
- 2013年3月
- 2013年2月
- 2013年1月
- 2012年12月
- 2012年10月
- 2012年5月
- 2010年6月
エントリ