1

私は、BestApproach というライブラリ プロジェクトを使用する TobaccoRoad というアプリに取り組んでいます。Parse バックエンドを使用して、カスタム生成コンテンツを表示し、プッシュ通知を処理します。数日前までは、どこかでいくつかの設定を台無しにしたに違いなく、解析システムへの接続が確立されていないように見えるまで、すべてがうまく機能していました。ローカルの問題であると確信しています。2 番目のテスターの電話には、数日間更新されたコードがプッシュされていませんが、まだ通知を受信して​​おり、そのカスタム コンテンツを表示できます。

奇妙なことに、私のワークスペースを片付け、雇用主がくれた (間違いなく良い) コードから新たに始めた後でも、Parse.com のすべてのチュートリアルとトラブルシューティング ガイドに従っています ( https://parse.com/docs/push_guideを参照)。 #installations/Android ; https://parse.com/tutorials/android-push-notifications ) まだ Parse に接続していません。思い出せるほど大きな変更を加えていないので、何が原因なのか途方に暮れています。

Parse.initialize 呼び出しにランダムな文字列を代入しても同じ結果が得られ、認証できないという logcat エラーが発生したため、それは悪い applicationID または clientKey の問題ではないことがわかっています。

これが私のマニフェストファイルからの関連ビットです。最初はライブラリプロジェクト用です...

<?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>

Parse サービスが初期化されるメイン アクティビティ (SplashActivity) の onCreate() メソッドのコードは次のとおりです。

@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 がライブラリ プロジェクトに依存しているため、それをマニフェスト ファイルに追加すると、それに関して私が試したことはすべて壊れてしまいました。

掘り下げるのは大変ですが、何か提案をいただければ幸いです。みんなありがとう。

4

2 に答える 2

0

考えられる修正:

この行を変更

 if (!("".equals(parseClientId) || "".equals(parseAppId))) {
    Parse.initialize(this, parseAppId, parseClientId);

これに:

if (!("".equals(parseClientId) || "".equals(parseAppId))) {
    Parse.initialize(SplashActivity.this, parseAppId, parseClientId);
于 2013-09-30T22:02:18.417 に答える