我开发了一个由Facebook客户端(Facebook画布)和移动客户端(Android应用程序)消费的Facebook应用程序("开发模式"游戏).我还有一个REST API(用Laravel开发),它允许客户端和Facebook API之间的交换.可以通过Internet(而不是localhost)访问API.
我的目标是检测用户何时卸载我的Facebook应用程序.
在Facebook的文档说:
人们可以通过Facebook.com卸载应用程序而无需与应用程序本身交互.为了帮助应用程序检测何时发生这种情况,我们允许它们提供取消授权的回调URL,只要发生这种情况就会对其进行ping操作.
您可以通过App Dashboard启用取消授权回调.只需转到您的应用,然后选择"设置"菜单,最后选择"高级"标签.为取消授权回调URL提供了一个文本字段.
每当您的应用程序的用户取消授权时,此URL将发送包含签名请求的HTTP POST.阅读我们的解析已签名请求的指南,了解如何对此进行解码以找出触发回调的用户ID.
此URL的Laravel路由接受GET并POST请求.我知道Facebook回调使用POST请求,但接受该GET方法允许我使用" 开放图形对象调试器 "工具来测试我的URL是否可以被Facebook服务器访问(并且它是成功的).
目前我使用自签名SSL证书(AES 128).Apache是我的Web服务器(它将所有HTTP请求重定向到HTTPS).
我知道如何解码的signed_request编码之后的参数(这个问题是不是在这里).
问题:
当我删除应用程序(使用Facebook测试帐户)时,永远不会调用回调URL.Apache日志(访问/错误)绝对没有显示任何内容(我可以通过Open Graph Object Debugger查看以前的访问).
我尝试使用已知CA提供的SSL证书通过另一个域更改回调URL.同样的结果......这非常令人沮丧.
我不明白为什么.我错过了什么?

我有一个名为'events'的MySQL表,其中包含事件数据.重要的列是'start'和'end',它们包含字符串(YYYY-MM-DD)以表示事件的开始和结束时间.
我想获取一段时间内所有活动事件的记录.
事件:
------------------------------ ID | START | END | ------------------------------ 1 | 2013-06-14 | 2013-06-14 | 2 | 2013-06-15 | 2013-08-21 | 3 | 2013-06-22 | 2013-06-25 | 4 | 2013-07-01 | 2013-07-10 | 5 | 2013-07-30 | 2013-07-31 | ------------------------------
请求/搜索:
Example: All events between 2013-06-13 and 2013-07-22 : #1, #3, #4 SELECT id FROM events WHERE start BETWEEN '2013-06-13' AND '2013-07-22' : #1, #2, #3, #4 SELECT id FROM events WHERE end BETWEEN '2013-06-13' AND '2013-07-22' : …
我已经构建了一个显示天气数据的Android应用程序(如果你想测试问题,我可以私下给你一个应用程序名称).用户可以从一天浏览到另一天以查看特定日期的天气.
我的应用程序使用片段(单个MainActivity和导航抽屉调用特定片段).
DayPagerFragment使用ViewPager具有无限数量的页面(动态片段).页面代表一天.
DayPagerFragment
public class DayPagerFragment extends Fragment {
private ViewPager mViewPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_day, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mViewPager = (ViewPager) view.findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(1);
mViewPager.setAdapter(new DayAdapter(getChildFragmentManager()));
}
private static class DayAdapter extends FragmentStatePagerAdapter {
public DayAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return DayFragment.newInstance(null);
}
@Override
public int getCount() {
// I don't …Run Code Online (Sandbox Code Playgroud) android memory-leaks android-imageview android-fragments android-viewpager
我对RoboSpice(高级用法)的问题很少.
注意:我使用RoboSpice OrmLite.
我的Android应用程序由两个主要活动组成:第一个是SplashActivity(启动时开始),第二个是MainActivity(在启动屏幕后推出5秒).我在启动时执行了2个请求:
SplashActivity
public class SplashActivity extends BaseActivity {
private fooRequest fooRequest;
private barRequest barRequest;
private exampleRequest exampleRequest;
private NewsRequest newsRequest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
fooRequest = new fooRequest();
barRequest = new barRequest();
...
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// Launch MainActivity...
}
}, 5000);
}
@Override
protected void onStart() {
super.onStart();
getSpiceManager().execute(fooRequest, new Integer(0), DurationInMillis.ONE_DAY, new fooRequestListener());
getSpiceManager().execute(barRequest, new Integer(1), DurationInMillis.ONE_DAY, new barRequestListener());
} …Run Code Online (Sandbox Code Playgroud) 我正在使用基于Intranet的应用程序,并且想使用Google服务。目前,我已经使用JavaScript客户端身份验证成功实现了带有“网站登录”功能的Google身份验证。我的用户现在可以登录或注册其Google帐户。
现在,我想使用Google API创建我的用户并与他们共享Google表格。这些文档将使用特定的Google帐户创建,然后与我的用户共享。
这就是为什么我要使用此服务器幻灯片流程获取一次性授权代码并将其交换为刷新令牌的原因:https : //developers.google.com/identity/sign-in/web/server-side-流
此刷新令牌将存储在我的数据库中,使我可以代表该离线用户使用Google服务。
使用JavaScript库,我能够获得随AJAX请求发送到服务器的一次性授权代码。
auth2.grantOfflineAccess({'redirect_uri': 'postmessage'}).then(grantOfflineAccessCallback);
var grantOfflineAccessCallback = function(authResult) {
var auth_code = authResult.code;
// Exchange the one-time authorization code for tokens
$.post(...);
}
Run Code Online (Sandbox Code Playgroud)
在服务器端,我使用Google API PHP客户端(v2.0.0-RC6)获取访问和刷新令牌。
$this->client = new Google_Client();
$this->client->setClientId($this->clientId);
$this->client->setClientSecret($this->clientSecret);
$this->client->setAccessType('offline');
$this->client->setApprovalPrompt('force');
$response = $this->client->fetchAccessTokenWithAuthCode($oneTimeCode);
Run Code Online (Sandbox Code Playgroud)
我无法交换授权码。
Client error: `POST https://www.googleapis.com/oauth2/v4/token` resulted in a `400 Bad Request` response:
{
"error": "invalid_request",
"error_description": "Missing parameter: redirect_uri"
}
Run Code Online (Sandbox Code Playgroud)
在此页面上,我们可以阅读:
在服务器上,将身份验证代码交换为访问和刷新令牌。使用访问令牌代表用户调用Google API。
在JAVA示例代码上:
REDIRECT_URI: // Specify the same redirect URI that you use with …Run Code Online (Sandbox Code Playgroud) 我开发了一个Android应用程序,我遇到了一些问题.
在我的MainActivity我有以下组件:
ArticleFragment显示文章的详细视图)Normaly,ViewPager与特定的Activity相关,但我真的想同时使用Navigation Drawer和ViewPager.唯一的方法是在同一个活动中实现这两个元素.
在DrawerLayout由导航抽屉本身和内容区域组成.在我的内容区域,我有一个FrameLayout和ViewPager.问题是ViewPager始终显示.
所以我的想法是使用android:visibility属性来交替显示/隐藏FrameLayout和ViewPager.如果你看我的activity_main.xml,你可以看到在 android:visibility设置为invisible上ViewPager.
/layout/activity_main.xml
<!-- The main content view -->
<RelativeLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/container"
android:paddingTop="?android:attr/actionBarSize"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- ViewPager -->
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible" />
</RelativeLayout>
<!-- The navigation drawer -->
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:name="NavigationDrawerFragment" />
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
然后:
MainActivity.java
public class MainActivity extends ActionBarActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks …Run Code Online (Sandbox Code Playgroud) android android-fragments android-viewpager navigation-drawer android-navigation
使用PHP,静态方法既可以用于静态方法,也可以用于非静态方法,而非静态方法只能用于非静态方法.这就是调用动态方法静态生成E_STRICT错误的原因.
例如:
<?php
class Example
{
public function foo() {
return "Foo";
}
public static function bar() {
return "Bar";
}
}
$ex = new Example();
// Non-static call
echo $ex->bar();
// Static call on a non-static method
// PHP Error "Strict standards: Non-static method should not be called statically"
// ERROR NOT DETECTED BY PHPSTORM!
echo Example::foo();
Run Code Online (Sandbox Code Playgroud)
我目前正在开发一个大型PHP应用程序,在某些PHP文件中静态调用非静态方法.这是一个非常老的PHP版本的问题,但我们决定迁移到最新的PHP版本.
手动检查所有项目文件,以确定这个错误的语法将太长(+ 1000文件)!
PhpStorm的内置代码检查功能在分析的源代码中未检测到此类错误.为什么?我应该配置什么?怎么样?
下面,我在PhpStorm中的PHP代码检查配置:
谢谢!
android ×4
date ×1
date-range ×1
facebook ×1
google-api ×1
google-oauth ×1
https ×1
laravel ×1
memory-leaks ×1
mysql ×1
ormlite ×1
php ×1
phpmd ×1
phpstorm ×1
robospice ×1
sql ×1