how*_*ttl 3 google-app-engine android google-cloud-messaging google-cloud-endpoints
根据本教程,我已经为移动后端入门应用编写了一个Android客户端.一切都适用于实施部分Continuous Queries
.
我写了一个查询,我从code(onPostCreate()
)中的正确位置调用它,但是查询永远不会返回任何数据.
我不相信这是一个身份验证问题,因为我能够成功地进行其他调用.
这是永远不会返回结果的代码:
CloudCallbackHandler<List<CloudEntity>> handler = new CloudCallbackHandler<List<CloudEntity>>() {
@Override
public void onComplete(List<CloudEntity> results) {
for (CloudEntity entity : results) {
UserLocation loc = new UserLocation(entity);
mUserLocations.remove(loc);
mUserLocations.add(loc);
drawMarkers();
}
}
@Override
public void onError(IOException e) {
Toast.makeText(getApplicationContext(), e.getMessage(),
Toast.LENGTH_LONG).show();
}
};
CloudQuery query = new CloudQuery("UserLocation");
query.setLimit(50);
query.setSort(CloudEntity.PROP_UPDATED_AT, Order.DESC);
query.setScope(Scope.FUTURE_AND_PAST);
getCloudBackend().list(query, handler);
Run Code Online (Sandbox Code Playgroud)
使用调试器,我已经验证了该getCloudBackend().list()
行的执行情况,但该onComplete()
方法从未被命中,也没有onError()
.
以下是一个完美运行的调用示例:
UserLocation self = new UserLocation(super.getAccountName(),
gh.encode(mCurrentLocation));
getCloudBackend().update(self.asEntity(), updateHandler);
Run Code Online (Sandbox Code Playgroud)
基本上,getCloudBackend().update()
工作,而getCloudBackend().list()
不是.
我还应该补充一点,我已经从教程中链接的github repo下载了完整的源代码,并且该代码存在同样的问题.我也尝试过多次重新部署后端服务器.
好的,我终于解决了这个问题!问题出现在清单和课堂上GCMIntentService.java
在清单中,GCM被注册为服务并且属于包.默认情况下,此服务是默认包的一部分com.google.cloud.backend.android
.当您创建一个新包并在其中包含所有客户端代码时,您需要将该GCMIntentService.java
类移动到该新包中并在清单中修改服务和广播接收器
<service android:name="yourpackagename.GCMIntentService" />
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="yourpackagename" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
默认包名称附带的任何其他权限也应更新为主包名称.如果您只打算使用移动后端启动程序附带的默认软件包,则无需修改此项.
关于GoogleAuthIOException,我最初也收到了.所以我重新启动了所有步骤以启用GCM和身份验证.需要注意的是,我仍然遵循教程,并Web Application -> Generic
在注册GCM服务器密钥和Web客户端ID时使用.注册Android客户端ID时要记住的另一个关键事项是,使用SHA1指纹时,它还需要一个包名.如果您为项目使用多个包,则包名称必须再次是您的主要客户端包.您可以从旧的Google API控制台获取Consts.java中的项目编号(并且需要注册GCM),并从新的云控制台获取项目ID.Web客户端ID也位于Consts.java文件中,并且在同一文件中,您必须通过更改来启用身份验证
public static final boolean IS_AUTH_ENABLED = false;
Run Code Online (Sandbox Code Playgroud)
至
public static final boolean IS_AUTH_ENABLED = true;
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
归档时间: |
|
查看次数: |
882 次 |
最近记录: |