我正在开发名为TobaccoRoad的应用程序,该应用程序使用名为BestApproach的库项目。它使用Parse后端显示自定义生成的内容并处理推送通知。几天前,当我必须弄乱某些设置并且它似乎不再与解析系统建立连接时,一切都运行良好。我很确定这是一个本地问题,因为我的第二个测试手机,几天内还没有推出更新的代码,仍在收到通知,可以查看自定义内容。
奇怪的是,即使在清理了我的工作区并从我的雇主给我的(绝对好的)代码开始,并遵循Parse.com上的所有教程和故障排除指南(请参阅https://parse.com/docs/push_guide#installations/Android; {{ 3}})我还没有连接到Parse。我没有做出任何我可以记得的重大改变,所以我不知道是什么原因引起的。
我知道这不是一个错误的applicationID或clientKey的问题,因为即使将随机字符串替换为Parse.initialize调用也会产生相同的结果,以及一个关于无法进行身份验证的logcat错误。
以下是我的清单文件中的相关位,首先是库项目...
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bestapproach.lib"
android:versionCode="8"
android:versionName="1.6.1">
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application android:icon="@drawable/app_icon" android:label="@string/app_name"
android:theme="@style/Theme.BA" >
<activity android:name="com.bestapproach.lib.SplashActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:configChanges="orientation"
android:theme="@style/Theme.BA.Splash">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--Declarations for all of my Activities...-->
<service android:name="com.parse.PushService" />
<receiver android:name="com.parse.ParseBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
</application>
</manifest>
我的依赖项目的清单完全相同,除了我在最后定义自定义接收器的地方:
<service android:name="com.parse.PushService" />
<receiver android:name="com.parse.ParseBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
<receiver android:name="com.bestapproach.lib.MyCustomReceiver">
<intent-filter>
<action android:name="com.bestapproach.lib.UPDATE_STATUS" />
</intent-filter>
</receiver>
这是我的主要活动(SplashActivity)中onCreate()方法的代码,其中初始化了Parse服务:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
String parseClientId = getString(R.string.parse_client_id);
String parseAppId = getString(R.string.parse_app_id);
//debug output
Log.v("parse should be initializing...", parseAppId+" "+parseClientId);
if (!("".equals(parseClientId) || "".equals(parseAppId))) {
Parse.initialize(this, parseAppId, parseClientId);
PushService.subscribe(this, "", MenuActivity.class);
PushService.setDefaultPushCallback(this, SplashActivity.class);
ParseInstallation.getCurrentInstallation().saveInBackground();
ParseAnalytics.trackAppOpened(getIntent());
final Activity a = this;
// Fetches content if it doesn't exist.
StoreManager sm = StoreManager.getInstance(a);
ParseStoreManager psm = ParseStoreManager.getInstance(a);
return;
}
}
建议我发现他们可能会按照我的需要走上正轨,包括在每个活动的Parse.initialize()
中运行onCreate()
,我不想做,因为有他们中的很多,这将是很多重复的代码,或生成一个Application对象并从那里运行它。由于TobaccoRoad对库项目的依赖性,我将其添加到我的清单文件后,我尝试过的所有内容最终都会破坏。
我知道,这需要深入挖掘,但任何建议都会受到赞赏。谢谢大家。
答案 0 :(得分:0)
可能的解决方法:
更改此行
if (!("".equals(parseClientId) || "".equals(parseAppId))) {
Parse.initialize(this, parseAppId, parseClientId);
到此:
if (!("".equals(parseClientId) || "".equals(parseAppId))) {
Parse.initialize(SplashActivity.this, parseAppId, parseClientId);
答案 1 :(得分:0)
问题在于
ParseAnalytics.trackAppOpened(getIntent());
从您的SplashActivity和应用程序范围接受该活动的意图 此外,您从我们通常不做的活动初始化解析。 我们尝试从Application类初始化parse,因此它具有Application范围的上下文而不是Activity Scope的上下文。 我建议你创建一个Application类,并将解析代码包含在应用程序的onCreate中......你只需要执行一次。
或者,您可以创建一些BaseActivities并使应用程序中的所有活动扩展到该活动。这样可以避免编写重复的代码......这是为了防止你不打算创建一个Application类。
请原谅我的任何错误......我是新来的回答。